2017-10-31 9 views
1

私はPython 3でBazelでpy_testを実行したいと思います。 BazelはPython 3を使用します

py_library(
    name = "foo", 
    srcs = ["foo.py"] 
) 

py_test(
    name = "foo_test", 
    srcs = glob(["foo_test.py",]), 
    deps = [":foo"] 
) 

py_runtime(
    name = "python-3.6.3", 
    files = [], 
    interpreter_path = "/usr/local/bin/python3", 
) 

は私がnew_http_archiveとサンドボックスbazelするのpython3をインポートし、bazel内http_archiveことを指すpy_runtimeルールのinterpreter_pathを提供したいと考え、

bazel test --python_top=//path/to/foo:python-3.6.3 foo_test 

しかし、この使用して、コマンドを達成することができましたサンドボックスこれまでのところ、私はinterpreter_pathを見つけることができません... py_runtimeのどこか他の場所からhttp_archiveラベルを参照しなければなりませんか?

new_http_archive(
name = "python_version", 
urls = ["https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz"], 
strip_prefix = "Python-3.6.3", 
build_file_content = """ 
py_library(
    name = "python_srcs", 
    srcs = glob(["Lib/*.py"]), 
    visibility = ["//visibility:public"] 
)""" 
) 

答えて

2

ダウンロードしているtgzにはインタープリタが含まれていません。インタプリタのソースコードが含まれています。あなたのビルドの一部としてインタプリタを構築したい場合は、この

new_http_archive(
    name = "python_version", 
    urls = ["https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz"], 
    strip_prefix = "Python-3.6.3", 
    build_file_content = """ 
genrule(
    name = "build_python", 
    srcs = glob(["**"]), 
    outs = ["python"], 
    cmd = "./external/python_version/configure && make && cp python [email protected]", 
    visibility = ["//visibility:public"], 
)""", 
) 

ような何かを行うことができます。そして、あなたのpy_runtimeルールがinterpreter属性(ないinterpreter_path)を設定します:

py_runtime(
    name = "python-3.6.3", 
    files = [], 
    interpreter = "@python_version//:python", 
) 
+0

ありがとうございました、このアプローチはクロスプラットフォームではありません私は "/ usr/local/bin/python3"を持つことに固執しますが、Bazelにpy_homeの環境変数を使用させる方法があるのだろうかと疑問に思っていますか? – Zeitgeist

+0

あなたはどんなプラットフォームを気にかけていますか?これはLinux上のほとんどのタイプで有効です。 MacまたはWindowsの場合、インストーラーをフェッチする代わりのnew_http_archivesを作成することができます。そして、あなたのpy_runtimeルールは、インタプリタ上でプラットフォームに基づいてどちらを使うかを選択するselect文を持つことができます。 – Adam

+0

私はすべてのプラットフォームを気にしています。 'srcs_version =" PY3 "'のときに '--python_path =/usr/local/bin/python3 --force_python = py3'でpython 3を強制する別の方法を見つけましたので、 -python_path'を使用して環境変数を受け入れることもできます)。ありがとう! – Zeitgeist

関連する問題