Aturan
py_binary
py_binary(name, deps, srcs, data, args, compatible_with, deprecation, distribs, env, exec_compatible_with, exec_properties, features, imports, legacy_create_init, licenses, main, output_licenses, python_version, restricted_to, srcs_version, stamp, tags, target_compatible_with, testonly, toolchains, visibility)
py_binary
adalah program Python yang dapat dieksekusi yang terdiri dari kumpulan file sumber .py
(mungkin milik aturan py_library
lainnya), hierarki direktori *.runfiles
yang berisi semua kode dan data yang diperlukan oleh program pada saat runtime, serta skrip stub yang memulai program dengan lingkungan dan data awal yang benar.
Contoh
py_binary( name = "foo", srcs = ["foo.py"], data = [":transform"], # a cc_binary which we invoke at run time deps = [ ":foolib", # a py_library ], )
Jika Anda ingin menjalankan py_binary
dari dalam biner atau pengujian lain (misalnya, menjalankan biner python untuk menyiapkan beberapa resource tiruan dari dalam java_test), pendekatan yang tepat adalah membuat biner atau pengujian lain bergantung pada py_binary
di bagian datanya. Biner
lainnya selanjutnya dapat menemukan py_binary
secara relatif terhadap direktori
sumber.
py_binary( name = "test_main", srcs = ["test_main.py"], deps = [":testlib"], ) java_library( name = "testing", srcs = glob(["*.java"]), data = [":test_main"] )
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. Jika main tidak ditentukan, nama ini harus sama dengan nama
file sumber yang merupakan titik masuk utama aplikasi,
tanpa ekstensi. Misalnya, jika titik entri Anda bernama
main.py , nama Anda harus main .
|
deps
|
deps di
Atribut umum yang ditentukan oleh sebagian besar aturan build.
Umumnya ini adalah aturan py_library .
|
srcs
|
.py ) yang diproses untuk membuat target.
Ini termasuk semua kode yang Anda check in dan semua file sumber yang dihasilkan. Sebagai gantinya, target library
disertakan di deps , sedangkan file biner lain yang diperlukan saat runtime berada di
data .
|
imports
|
PYTHONPATH .
Tunduk pada penggantian "Buat variabel". Direktori impor ini akan ditambahkan untuk aturan ini dan semua aturan yang bergantung padanya (catatan: bukan aturan yang menjadi dependensi aturan ini. Setiap direktori akan ditambahkan ke
Jalur absolut (jalur yang dimulai dengan |
legacy_create_init
|
--incompatible_default_to_explicit_init_py digunakan. Jika false, pengguna bertanggung jawab untuk membuat file __init__.py (mungkin kosong) dan menambahkannya ke srcs target Python sesuai kebutuhan.
|
main
|
srcs . Jika tidak ditentukan, name akan digunakan sebagai gantinya (lihat di atas). Jika name tidak
cocok dengan nama file apa pun di srcs , main harus ditentukan.
|
python_version
|
deps transitifnya) untuk Python 2 atau Python
3. Nilai yang valid adalah "PY2" dan "PY3" (default).
Versi Python selalu direset (mungkin secara default) ke versi apa pun yang ditentukan oleh atribut ini, terlepas dari versi yang ditentukan pada command line atau oleh target tinggi lainnya yang bergantung pada versi ini. Jika ingin Peringatan bug: Atribut ini menetapkan versi yang digunakan Bazel untuk mem-build target Anda, tetapi karena #4815, skrip stub yang dihasilkan mungkin masih memanggil versi penafsir yang salah saat runtime. Lihat solusi ini, yang melibatkan penentuan target |
srcs_version
|
srcs target agar kompatibel dengan Python
2, Python 3, atau keduanya. Untuk benar-benar menetapkan versi runtime Python, gunakan atribut python_version dari aturan Python yang dapat dieksekusi (py_binary atau py_test ).
Nilai yang diizinkan adalah: Perlu diketahui bahwa hanya aturan yang dapat dieksekusi ( Untuk mendapatkan informasi diagnostik tentang dependensi mana yang memperkenalkan persyaratan versi,
Anda dapat menjalankan aspek bazel build <your target> \ --aspects=@rules_python//python:defs.bzl%find_requirements \ --output_groups=pyversioninfoIni akan mem-build file dengan akhiran -pyversioninfo.txt yang memberikan informasi
tentang alasan target Anda memerlukan satu versi Python atau versi lainnya. Perhatikan bahwa pengujian ini berfungsi meskipun target yang ditentukan gagal di-build karena konflik versi.
|
stamp
|
Biner berstempel tidak dibuat ulang kecuali dependensinya berubah. |
py_library
py_library(name, deps, srcs, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, imports, licenses, restricted_to, srcs_version, tags, target_compatible_with, testonly, visibility)
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
deps
|
deps di
Atribut umum yang ditentukan oleh sebagian besar aturan build.
Umumnya ini adalah aturan py_library .
|
srcs
|
.py ) yang diproses untuk membuat target.
Ini termasuk semua kode yang Anda check in dan semua file sumber yang dihasilkan.
|
imports
|
PYTHONPATH .
Tunduk pada penggantian "Buat variabel". Direktori impor ini akan ditambahkan untuk aturan ini dan semua aturan yang bergantung padanya (catatan: bukan aturan yang menjadi dependensi aturan ini. Setiap direktori akan ditambahkan ke
Jalur absolut (jalur yang dimulai dengan |
srcs_version
|
srcs target agar kompatibel dengan Python
2, Python 3, atau keduanya. Untuk benar-benar menetapkan versi runtime Python, gunakan atribut python_version dari aturan Python yang dapat dieksekusi (py_binary atau py_test ).
Nilai yang diizinkan adalah: Perlu diketahui bahwa hanya aturan yang dapat dieksekusi ( Untuk mendapatkan informasi diagnostik tentang dependensi mana yang memperkenalkan persyaratan versi,
Anda dapat menjalankan aspek bazel build <your target> \ --aspects=@rules_python//python:defs.bzl%find_requirements \ --output_groups=pyversioninfoIni akan mem-build file dengan akhiran -pyversioninfo.txt yang memberikan informasi
tentang alasan target Anda memerlukan satu versi Python atau versi lainnya. Perhatikan bahwa pengujian ini berfungsi meskipun target yang ditentukan gagal di-build karena konflik versi.
|
py_test
py_test(name, deps, srcs, data, args, compatible_with, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, imports, legacy_create_init, licenses, local, main, python_version, restricted_to, shard_count, size, srcs_version, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility)
Aturan py_test()
mengompilasi pengujian. Pengujian adalah wrapper biner di sekitar beberapa kode pengujian.
Contoh
py_test( name = "runtest_test", srcs = ["runtest_test.py"], deps = [ "//path/to/a/py/library", ], )
Anda juga dapat menentukan modul utama:
py_test( name = "runtest_test", srcs = [ "runtest_main.py", "runtest_lib.py", ], main = "runtest_main.py", )
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
deps
|
deps di
Atribut umum yang ditentukan oleh sebagian besar aturan build.
Umumnya ini adalah aturan py_library .
|
srcs
|
.py ) yang diproses untuk membuat target.
Ini termasuk semua kode yang Anda check in dan semua file sumber yang dihasilkan. Sebagai gantinya, target library
disertakan di deps , sedangkan file biner lain yang diperlukan saat runtime berada di
data .
|
imports
|
PYTHONPATH .
Tunduk pada penggantian "Buat variabel". Direktori impor ini akan ditambahkan untuk aturan ini dan semua aturan yang bergantung padanya (catatan: bukan aturan yang menjadi dependensi aturan ini. Setiap direktori akan ditambahkan ke
Jalur absolut (jalur yang dimulai dengan |
legacy_create_init
|
--incompatible_default_to_explicit_init_py digunakan. Jika false, pengguna bertanggung jawab untuk membuat file __init__.py (mungkin kosong) dan menambahkannya ke srcs target Python sesuai kebutuhan.
|
main
|
srcs . Jika tidak ditentukan, name akan digunakan sebagai gantinya (lihat di atas). Jika name tidak
cocok dengan nama file apa pun di srcs , main harus ditentukan.
|
python_version
|
deps transitifnya) untuk Python 2 atau Python
3. Nilai yang valid adalah "PY2" dan "PY3" (default).
Versi Python selalu direset (mungkin secara default) ke versi apa pun yang ditentukan oleh atribut ini, terlepas dari versi yang ditentukan pada command line atau oleh target tinggi lainnya yang bergantung pada versi ini. Jika ingin Peringatan bug: Atribut ini menetapkan versi yang digunakan Bazel untuk mem-build target Anda, tetapi karena #4815, skrip stub yang dihasilkan mungkin masih memanggil versi penafsir yang salah saat runtime. Lihat solusi ini, yang melibatkan penentuan target |
srcs_version
|
srcs target agar kompatibel dengan Python
2, Python 3, atau keduanya. Untuk benar-benar menetapkan versi runtime Python, gunakan atribut python_version dari aturan Python yang dapat dieksekusi (py_binary atau py_test ).
Nilai yang diizinkan adalah: Perlu diketahui bahwa hanya aturan yang dapat dieksekusi ( Untuk mendapatkan informasi diagnostik tentang dependensi mana yang memperkenalkan persyaratan versi,
Anda dapat menjalankan aspek bazel build <your target> \ --aspects=@rules_python//python:defs.bzl%find_requirements \ --output_groups=pyversioninfoIni akan mem-build file dengan akhiran -pyversioninfo.txt yang memberikan informasi
tentang alasan target Anda memerlukan satu versi Python atau versi lainnya. Perhatikan bahwa pengujian ini berfungsi meskipun target yang ditentukan gagal di-build karena konflik versi.
|
stamp
|
|
py_runtime
py_runtime(name, compatible_with, coverage_tool, deprecation, distribs, features, files, interpreter, interpreter_path, licenses, python_version, restricted_to, stub_shebang, tags, target_compatible_with, testonly, visibility)
Mewakili runtime Python yang digunakan untuk mengeksekusi kode Python.
Target py_runtime
dapat mewakili runtime platform atau
runtime dalam build. Runtime platform mengakses penafsir yang diinstal sistem di jalur
yang diketahui, sedangkan runtime dalam build mengarah ke target yang dapat dieksekusi yang bertindak sebagai penafsir. Dalam kedua kasus tersebut, "penafsir" berarti skrip wrapper atau biner yang dapat dieksekusi yang mampu menjalankan skrip Python yang diteruskan pada command line, mengikuti konvensi yang sama dengan penafsir CPython standar.
Runtime platform pada dasarnya non-hermetic. Platform ini memberlakukan persyaratan pada platform target untuk memiliki penafsir yang berada di jalur tertentu. Runtime dalam build mungkin bersifat hermetis atau tidak, bergantung pada apakah runtime tersebut mengarah ke penafsir yang check in atau skrip wrapper yang mengakses penafsir sistem.
Contoh:
py_runtime( name = "python-2.7.12", files = glob(["python-2.7.12/**"]), interpreter = "python-2.7.12/bin/python", ) py_runtime( name = "python-3.6.0", interpreter_path = "/opt/pyenv/versions/3.6.0/bin/python", )
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
coverage_tool
|
py_binary dan py_test .
Jika ditetapkan, target harus menghasilkan satu file atau merupakan target yang dapat dieksekusi. Jalur ke file tunggal, atau file yang dapat dieksekusi jika targetnya dapat dieksekusi, menentukan titik entri untuk alat cakupan Python. Target dan runfile-nya akan ditambahkan ke runfile saat cakupan diaktifkan. Titik entri untuk alat ini harus dapat dimuat oleh penafsir Python (misalnya, file |
files
|
|
interpreter
|
|
interpreter_path
|
|
python_version
|
"PY2"
dan "PY3" .
Nilai default dikontrol oleh flag |
stub_shebang
|
py_binary .
Lihat masalah 8685 untuk motivasi. Tidak berlaku untuk Windows. |