Python Kuralları

Sorun bildir Kaynağı görüntüle Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Kurallar

py_binary

Kural kaynağını görüntüleme
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, .py kaynak dosyalarından (muhtemelen diğer py_library kurallarına ait) oluşan, çalıştırma zamanında programın ihtiyaç duyduğu tüm kod ve verileri içeren bir *.runfiles dizin ağacından ve programı doğru başlangıç ortamıyla ve verileriyle başlatan bir taslak komut dosyasından oluşan yürütülebilir bir Python programıdır.

Örnekler

py_binary(
    name = "foo",
    srcs = ["foo.py"],
    data = [":transform"],  # a cc_binary which we invoke at run time
    deps = [
        ":foolib",  # a py_library
    ],
)

Başka bir ikili dosya veya testin içinden py_binary çalıştırmak istiyorsanız (örneğin, bir java_test içinden bazı örnek kaynaklar oluşturmak için bir python ikili dosyası çalıştırmak) doğru yaklaşım, diğer ikili dosyayı veya testi veri bölümündeki py_binary'ye bağımlı hale getirmektir. Diğer ikili dosya, py_binary dosyasını kaynak dizine göre bulabilir.

py_binary(
    name = "test_main",
    srcs = ["test_main.py"],
    deps = [":testing"],
)

java_library(
    name = "testing",
    srcs = glob(["*.java"]),
    data = [":test_main"]
)

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.


main belirtilmemişse bu, uygulamanın ana giriş noktası olan kaynak dosyanın adıyla aynı olmalıdır. Örneğin, giriş noktanız main.py ise adınız main olmalıdır.
deps

Etiketler listesi; varsayılan değer []'dir.

İkili hedefe bağlanacak diğer kitaplıkların listesi. deps ile ilgili genel yorumları Çoğu derleme kuralı tarafından tanımlanan tipik özellikler başlıklı makalede bulabilirsiniz. Bunlar genellikle py_library kurallarıdır.
srcs

Etiketler listesi; zorunlu

Hedefi oluşturmak için işlenen kaynak (.py) dosyalarının listesi. Bu, tüm kodunuz ve oluşturulan kaynak dosyaları için geçerlidir. Kitaplık hedefleri bunun yerine deps klasörüne, çalışma zamanında ihtiyaç duyulan diğer ikili dosyalar ise data klasörüne yerleştirilir.
imports

Dize listesi; varsayılan değer []'tir.

PYTHONPATH'e eklenecek içe aktarma dizinlerinin listesi.

"Değişken yap" yerine koyma işlemine tabidir. Bu içe aktarma dizinleri, bu kural ve bu kurala bağlı tüm kurallar için eklenir (not: bu kuralın bağlı olduğu kurallar değil). Her dizin, bu kurala bağlı py_binary kurallarına göre PYTHONPATH'e eklenir.

Mutlak yollara (/ ile başlayan yollar) ve yürütme kökünün üstündeki bir yola atıfta bulunan yollara izin verilmez ve bu yollar hata verir.

legacy_create_init

Tam sayı; varsayılan değer -1'tür

Runfiles ağacında, boş __init__.py dosyalarının dolaylı olarak oluşturulup oluşturulmayacağı. Bunlar, Python kaynak kodu veya paylaşılan kitaplıklar içeren her dizinde ve bu dizinlerin, depo kök dizini hariç her üst dizininde oluşturulur. Varsayılan otomatik ayar, --incompatible_default_to_explicit_init_py kullanılmadığı sürece doğru anlamına gelir. Yanlış ise kullanıcının, __init__.py dosyalarını (boş olabilir) oluşturması ve gerektiğinde Python hedeflerinin srcs dosyasına eklemesi gerekir.
main

Etiket; varsayılan değer None'dir.

Uygulamanın ana giriş noktası olan kaynak dosyanın adı. Bu dosya srcs içinde de listelenmelidir. Belirtilmemişse bunun yerine name kullanılır (yukarıya bakın). name, srcs içindeki herhangi bir dosya adıyla eşleşmiyorsa main belirtilmelidir.
python_version

Dize; yapılandırılamaz; varsayılan değer "_INTERNAL_SENTINEL"

Bu hedefin (ve geçişli deps özelliğinin) Python 2 veya Python 3 için oluşturulup oluşturulmayacağını belirtir. Geçerli değerler "PY2" ve "PY3"'tır (varsayılan).

Python sürümü, komut satırında veya bu sürüme bağlı diğer üst hedeflerde belirtilen sürümden bağımsız olarak her zaman bu özellik tarafından belirtilen sürüme sıfırlanır (muhtemelen varsayılan olarak).

Mevcut Python sürümünde select() yapmak istiyorsanız @rules_python//python:python_version değerini inceleyebilirsiniz. Daha fazla bilgi için buraya göz atın.

Hata uyarısı: Bu özellik, Bazel'in hedefinizi derleyeceği sürümü belirler ancak #4815 nedeniyle, ortaya çıkan stub komut dosyası çalışma zamanında yanlış yorumlayıcı sürümünü çağırmaya devam edebilir. Gerekirse bir Python sürümüne işaret eden bir py_runtime hedefi tanımlamayı ve --python_top'ı ayarlayarak bu py_runtime'yi etkinleştirmeyi içeren bu geçici çözüme bakın.

srcs_version

Dize; varsayılan değer "PY2AND3"'tir

Bu özellik, hedefin srcs özelliğinin Python 2, Python 3 veya her ikisiyle de uyumlu olduğunu belirtir. Python çalışma zamanı sürümünü ayarlamak için yürütülebilir bir Python kuralının (py_binary veya py_test) python_version özelliğini kullanın.

İzin verilen değerler: "PY2AND3", "PY2" ve "PY3". "PY2ONLY" ve "PY3ONLY" değerlerine de geçmişe dönük kullanım nedeniyle izin verilir ancak bu değerler temelde "PY2" ve "PY3" ile aynı olduğundan kullanılmamalıdır.

Yalnızca yürütülebilir kuralların (py_binary ve py_library ), mevcut Python sürümünü bu özelliğin değerine göre doğruladığını unutmayın. (Bu bir özelliktir; py_library mevcut Python sürümünü değiştirmediğinden, doğrulama işlemi yaparsa aynı çağrıda hem PY2ONLY hem de PY3ONLY kitaplıklarının derlenmesi imkansız olur.) Ayrıca, sürüm uyuşmazlığı varsa hata yalnızca yürütme aşamasında bildirilir. Özellikle, hata bazel build --nobuild çağrısında görünmez.)

Hangi bağımlılıkların sürüm koşulları getirdiği hakkında teşhis bilgileri almak için hedefinizde find_requirements yönünü çalıştırabilirsiniz:

          bazel build <your target> \
              --aspects=@rules_python//python:defs.bzl%find_requirements \
              --output_groups=pyversioninfo
          
Bu işlem, hedefinizin neden belirli bir Python sürümünü gerektirdiğine dair bilgi veren -pyversioninfo.txt son ekiyle bir dosya oluşturur. Belirtilen hedef bir sürüm çakışması nedeniyle oluşturulamamış olsa bile bu yöntemin işe yaradığını unutmayın.
stamp

Tam sayı; varsayılan değer -1'tür

Derleme bilgilerinin ikili dosyaya kodlanıp kodlanmayacağı. Olası değerler:
  • stamp = 1: --nostamp derlemelerinde bile derleme bilgilerini her zaman ikili dosyaya damgalayın. İkili dosya ve ona bağlı tüm yayın sonrası işlemler için uzaktan önbelleğe alma işlemini potansiyel olarak sonlandırdığından bu ayardan kaçınılmalıdır.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu, iyi bir derleme sonucu önbelleğe alma sağlar.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi, --[no]stamp işareti tarafından kontrol edilir.

Damgalanmış ikili dosyalar, bağımlılıkları değişmediği sürece yeniden oluşturulmaz.

py_library

Kural kaynağını görüntüleme
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)

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiketler listesi; varsayılan değer []'dir.

İkili hedefe bağlanacak diğer kitaplıkların listesi. deps ile ilgili genel yorumları Çoğu derleme kuralı tarafından tanımlanan tipik özellikler başlıklı makalede bulabilirsiniz. Bunlar genellikle py_library kurallarıdır.
srcs

Etiketler listesi; varsayılan değer []'dir.

Hedefi oluşturmak için işlenen kaynak (.py) dosyalarının listesi. Bu, tüm kodunuz ve oluşturulan kaynak dosyaları için geçerlidir.
imports

Dize listesi; varsayılan değer []'tir.

PYTHONPATH'e eklenecek içe aktarma dizinlerinin listesi.

"Değişken yap" yerine koyma işlemine tabidir. Bu içe aktarma dizinleri, bu kural ve bu kurala bağlı tüm kurallar için eklenir (not: bu kuralın bağlı olduğu kurallar değil). Her dizin, bu kurala bağlı py_binary kurallarına göre PYTHONPATH'e eklenir.

Mutlak yollara (/ ile başlayan yollar) ve yürütme kökünün üstündeki bir yola atıfta bulunan yollara izin verilmez ve bu yollar hata verir.

srcs_version

Dize; varsayılan değer "PY2AND3"'tir

Bu özellik, hedefin srcs özelliğinin Python 2, Python 3 veya her ikisiyle de uyumlu olduğunu belirtir. Python çalışma zamanı sürümünü ayarlamak için yürütülebilir bir Python kuralının (py_binary veya py_test) python_version özelliğini kullanın.

İzin verilen değerler: "PY2AND3", "PY2" ve "PY3". "PY2ONLY" ve "PY3ONLY" değerlerine de geçmişe dönük kullanım nedeniyle izin verilir ancak bu değerler temelde "PY2" ve "PY3" ile aynı olduğundan kullanılmamalıdır.

Yalnızca yürütülebilir kuralların (py_binary ve py_library ), mevcut Python sürümünü bu özelliğin değerine göre doğruladığını unutmayın. (Bu bir özelliktir; py_library mevcut Python sürümünü değiştirmediğinden, doğrulama işlemi yaparsa aynı çağrıda hem PY2ONLY hem de PY3ONLY kitaplıklarının derlenmesi imkansız olur.) Ayrıca, sürüm uyuşmazlığı varsa hata yalnızca yürütme aşamasında bildirilir. Özellikle, hata bazel build --nobuild çağrısında görünmez.)

Hangi bağımlılıkların sürüm koşulları getirdiği hakkında teşhis bilgileri almak için hedefinizde find_requirements yönünü çalıştırabilirsiniz:

          bazel build <your target> \
              --aspects=@rules_python//python:defs.bzl%find_requirements \
              --output_groups=pyversioninfo
          
Bu işlem, hedefinizin neden belirli bir Python sürümünü gerektirdiğine dair bilgi veren -pyversioninfo.txt son ekiyle bir dosya oluşturur. Belirtilen hedef bir sürüm çakışması nedeniyle oluşturulamamış olsa bile bu yöntemin işe yaradığını unutmayın.

py_test

Kural kaynağını görüntüleme
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)

py_test() kuralı bir testi derleyebilir. Test, bazı test kodlarının etrafına yerleştirilmiş bir ikili sarmalayıcıdır.

Örnekler

py_test(
    name = "runtest_test",
    srcs = ["runtest_test.py"],
    deps = [
        "//path/to/a/py/library",
    ],
)

Ana modül de belirtilebilir:

py_test(
    name = "runtest_test",
    srcs = [
        "runtest_main.py",
        "runtest_lib.py",
    ],
    main = "runtest_main.py",
)

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiketler listesi; varsayılan değer []'dir.

İkili hedefe bağlanacak diğer kitaplıkların listesi. deps ile ilgili genel yorumları Çoğu derleme kuralı tarafından tanımlanan tipik özellikler başlıklı makalede bulabilirsiniz. Bunlar genellikle py_library kurallarıdır.
srcs

Etiketler listesi; zorunlu

Hedefi oluşturmak için işlenen kaynak (.py) dosyalarının listesi. Bu, tüm kodunuz ve oluşturulan kaynak dosyaları için geçerlidir. Kitaplık hedefleri bunun yerine deps klasörüne, çalışma zamanında ihtiyaç duyulan diğer ikili dosyalar ise data klasörüne yerleştirilir.
imports

Dize listesi; varsayılan değer []'tir.

PYTHONPATH'e eklenecek içe aktarma dizinlerinin listesi.

"Değişken yap" yerine koyma işlemine tabidir. Bu içe aktarma dizinleri, bu kural ve bu kurala bağlı tüm kurallar için eklenir (not: bu kuralın bağlı olduğu kurallar değil). Her dizin, bu kurala bağlı py_binary kurallarına göre PYTHONPATH'e eklenir.

Mutlak yollara (/ ile başlayan yollar) ve yürütme kökünün üstündeki bir yola atıfta bulunan yollara izin verilmez ve bu yollar hata verir.

legacy_create_init

Tam sayı; varsayılan değer -1'tür

Runfiles ağacında, boş __init__.py dosyalarının dolaylı olarak oluşturulup oluşturulmayacağı. Bunlar, Python kaynak kodu veya paylaşılan kitaplıklar içeren her dizinde ve bu dizinlerin, depo kök dizini hariç her üst dizininde oluşturulur. Varsayılan otomatik ayar, --incompatible_default_to_explicit_init_py kullanılmadığı sürece doğru anlamına gelir. Yanlış ise kullanıcının, __init__.py dosyalarını (boş olabilir) oluşturması ve gerektiğinde Python hedeflerinin srcs dosyasına eklemesi gerekir.
main

Etiket; varsayılan değer None'dir.

Uygulamanın ana giriş noktası olan kaynak dosyanın adı. Bu dosya srcs içinde de listelenmelidir. Belirtilmemişse bunun yerine name kullanılır (yukarıya bakın). name, srcs içindeki herhangi bir dosya adıyla eşleşmiyorsa main belirtilmelidir.
python_version

Dize; yapılandırılamaz; varsayılan değer "_INTERNAL_SENTINEL"

Bu hedefin (ve geçişli deps özelliğinin) Python 2 veya Python 3 için oluşturulup oluşturulmayacağını belirtir. Geçerli değerler "PY2" ve "PY3"'tır (varsayılan).

Python sürümü, komut satırında veya bu sürüme bağlı diğer üst hedeflerde belirtilen sürümden bağımsız olarak her zaman bu özellik tarafından belirtilen sürüme sıfırlanır (muhtemelen varsayılan olarak).

Mevcut Python sürümünde select() yapmak istiyorsanız @rules_python//python:python_version değerini inceleyebilirsiniz. Daha fazla bilgi için buraya göz atın.

Hata uyarısı: Bu özellik, Bazel'in hedefinizi derleyeceği sürümü belirler ancak #4815 nedeniyle, ortaya çıkan stub komut dosyası çalışma zamanında yanlış yorumlayıcı sürümünü çağırmaya devam edebilir. Gerekirse bir Python sürümüne işaret eden bir py_runtime hedefi tanımlamayı ve --python_top'ı ayarlayarak bu py_runtime'yi etkinleştirmeyi içeren bu geçici çözüme bakın.

srcs_version

Dize; varsayılan değer "PY2AND3"'tir

Bu özellik, hedefin srcs özelliğinin Python 2, Python 3 veya her ikisiyle de uyumlu olduğunu belirtir. Python çalışma zamanı sürümünü ayarlamak için yürütülebilir bir Python kuralının (py_binary veya py_test) python_version özelliğini kullanın.

İzin verilen değerler: "PY2AND3", "PY2" ve "PY3". "PY2ONLY" ve "PY3ONLY" değerlerine de geçmişe dönük kullanım nedeniyle izin verilir ancak bu değerler temelde "PY2" ve "PY3" ile aynı olduğundan kullanılmamalıdır.

Yalnızca yürütülebilir kuralların (py_binary ve py_library ), mevcut Python sürümünü bu özelliğin değerine göre doğruladığını unutmayın. (Bu bir özelliktir; py_library mevcut Python sürümünü değiştirmediğinden, doğrulama işlemi yaparsa aynı çağrıda hem PY2ONLY hem de PY3ONLY kitaplıklarının derlenmesi imkansız olur.) Ayrıca, sürüm uyuşmazlığı varsa hata yalnızca yürütme aşamasında bildirilir. Özellikle, hata bazel build --nobuild çağrısında görünmez.)

Hangi bağımlılıkların sürüm koşulları getirdiği hakkında teşhis bilgileri almak için hedefinizde find_requirements yönünü çalıştırabilirsiniz:

          bazel build <your target> \
              --aspects=@rules_python//python:defs.bzl%find_requirements \
              --output_groups=pyversioninfo
          
Bu işlem, hedefinizin neden belirli bir Python sürümünü gerektirdiğine dair bilgi veren -pyversioninfo.txt son ekiyle bir dosya oluşturur. Belirtilen hedef bir sürüm çakışması nedeniyle oluşturulamamış olsa bile bu yöntemin işe yaradığını unutmayın.
stamp

Tam sayı; varsayılan değer 0'tür

Damga bağımsız değişkeninin testler için varsayılan olarak 0 olarak ayarlandığı dışında, py_binary() bağımsız değişkenleri ile ilgili bölüme bakın.

py_runtime

Kural kaynağını görüntüleme
py_runtime(name, bootstrap_template, compatible_with, coverage_tool, deprecation, distribs, features, files, interpreter, interpreter_path, licenses, python_version, restricted_to, stub_shebang, tags, target_compatible_with, testonly, visibility)

Python kodunu yürütmek için kullanılan bir Python çalışma zamanını temsil eder.

py_runtime hedefi, platform çalışma zamanı veya derleme içi çalışma zamanı temsil edebilir. Platform çalışma zamanı, bilinen bir yolda sistem tarafından yüklenen bir yorumlayıcıya erişirken yerleşik çalışma zamanı, yorumlayıcı görevi gören bir yürütülebilir hedefi işaret eder. Her iki durumda da "yorumlayıcı", standart CPython yorumlayıcısıyla aynı kurallara uyarak komut satırında iletilen bir Python komut dosyasını çalıştırabilen tüm yürütülebilir ikili veya sarmalayıcı komut dosyası anlamına gelir.

Platform çalışma zamanı, doğası gereği hermetik değildir. Hedef platformda belirli bir yolda bir yorumlayıcı bulunması şartı getirir. Yerleşik çalışma zamanı, kontrollü bir yorumlayıcıya mı yoksa sistem yorumlayıcısına erişen bir sarmalayıcı komut dosyasına mı işaret ettiğine bağlı olarak hermetik olabilir veya olmayabilir.

Örnek:

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",
)

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

bootstrap_template

Etiket; varsayılan değer "@bazel_tools//tools/python:python_bootstrap_template.txt"'dir.

Daha önce "Python stub komut dosyası" olarak adlandırılan bu dosya, her Python yürütülebilir hedefine giriş noktasıdır.
coverage_tool

Etiket; varsayılan değer None'dir.

Bu, py_binary ve py_test hedeflerinden kod kapsamı bilgileri toplamak için kullanılacak bir hedeftir.

Ayarlanırsa hedef tek bir dosya oluşturmalı veya yürütülebilir bir hedef olmalıdır. Tek dosyanın yolu veya hedef yürütülebilirse yürütülebilir dosyanın yolu, python kapsam aracının giriş noktasını belirler. Kapsam etkinleştirildiğinde hedef ve çalıştırma dosyaları, çalıştırma dosyalarına eklenir.

Aracın giriş noktası, bir Python yorumlayıcısı tarafından yüklenebilir olmalıdır (ör. .py veya .pyc dosyası). En azından run ve lcov alt komutlarını içerecek şekilde coverage.py komut satırı bağımsız değişkenlerini kabul etmelidir.

files

Etiketler listesi; varsayılan değer []'dir.

Yerleşik çalışma zamanında bu, çalışma zamanını oluşturan dosya grubudur. Bu dosyalar, bu çalışma zamanını kullanan Python ikili dosyalarının çalışma dosyalarına eklenir. Platform çalışma zamanında bu özellik ayarlanmamalıdır.
interpreter

Etiket; varsayılan değer None'dir.

Derleme içi çalışma zamanında bu, yorumlayıcı olarak çağrılacak hedeftir. Platform çalışma zamanında bu özellik ayarlanmamalıdır.
interpreter_path

Dize; varsayılan değer ""'tir

Platform çalışma zamanı için bu, hedef platformdaki bir Python yorumlayıcısının mutlak yoludur. Yerleşik çalışma zamanında bu özellik ayarlanmamalıdır.
python_version

Dize; varsayılan değer "_INTERNAL_SENTINEL"'tir

Bu çalışma zamanının Python ana sürümü 2 mi yoksa 3 mü olduğu. Geçerli değerler "PY2" ve "PY3"'dir.

Varsayılan değer, --incompatible_py3_is_default işareti tarafından kontrol edilir. Ancak gelecekte bu özellik zorunlu olacak ve varsayılan bir değeri olmayacak.

stub_shebang

Dize; varsayılan değer "#!/usr/bin/env python3"'tir

py_binary hedefleri yürütülürken kullanılan önyükleme Python komut dosyasına eklenen "Shebang" ifadesi.

Motivasyon için 8685 numaralı soruna bakın.

Windows için geçerli değildir.