Python Kuralları

Kurallar

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; bir .py kaynak dosyası koleksiyonu (muhtemelen diğer py_library kurallarına ait olabilir), çalışma zamanında programın ihtiyaç duyduğu tüm kod ve verileri içeren bir *.runfiles dizin ağacı ve programı doğru başlangıç ortamı ve verilerle başlatan saplama 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 program veya test içinden py_binary çalıştırmak isterseniz (örneğin, bir java_test içinden sahte kaynak oluşturmak için bir python ikili programı çalıştırmanız) doğru yaklaşım, diğer ikili programın veya testi, veri bölümündeki py_binary öğesine bağımlı hale getirmektir. Daha sonra diğer ikili program, kaynak dizine göre py_binary konumunu bulabilir.

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

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

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.


main belirtilmezse bu değer, uygulamanın ana giriş noktası olan kaynak dosyanın adıyla (uzantı hariç) aynı olmalıdır. Örneğin, giriş noktanız main.py olarak adlandırılırsa adınız main olmalıdır.
deps

List of labels; optional

İkili hedefe bağlanacak diğer kitaplıkların listesi. Çoğu derleme kuralı tarafından tanımlanan genel özellikler sayfasında deps ile ilgili genel yorumlara bakın. Bunlar genellikle py_library kurallarıdır.
srcs

List of labels; required

Hedefi oluşturmak için işlenen kaynak (.py) dosyalarının listesi. Bu, tüm check-in kodunuzu ve oluşturulan kaynak dosyalarınızı içerir. Kitaplık hedefleri deps klasörüne aitken, çalışma zamanında gereken diğer ikili dosyalar data klasörüne ait.
imports

List of strings; optional

PYTHONPATH içine eklenecek içe aktarma dizinlerinin listesi.

"Değişken oluşturma" değişikliğine tabidir. Bu içe aktarma dizinleri, bu kural ve ona bağlı tüm kurallar için eklenir (not: bu kuralın bağlı olduğu kurallar değildir). Her dizin bu kurala bağlı olan py_binary kuralları tarafından PYTHONPATH içine eklenir.

Hataya neden olan mutlak yollara (/ ile başlayan yollar) ve yürütme kökü üzerindeki bir yola referans veren yollara izin verilmez.

legacy_create_init

Integer; optional; default is -1

Runfiles ağacında gizli olarak boş __init__.py dosyalarının oluşturulup oluşturulmayacağı. Bunlar, Python kaynak kodunu veya paylaşılan kitaplıkları içeren her dizinde ve depo kök dizini hariç bu dizinlerin her üst dizininde oluşturulur. --incompatible_default_to_explicit_init_py kullanılmadığı sürece varsayılan otomatik, "doğru" anlamına gelir. Yanlış değeri döndürülürse kullanıcı, (büyük olasılıkla boş) __init__.py dosyaları oluşturmaktan ve bu dosyaları gerektiği gibi Python hedeflerinin srcs bölümüne eklemekten sorumludur.
main

Label; optional

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 öğesindeki hiçbir dosya adıyla eşleşmiyorsa main belirtilmelidir.
python_version

String; optional; nonconfigurable; default is "_INTERNAL_SENTINEL"

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

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

Mevcut Python sürümünde select() işlemini yapmak istiyorsanız @rules_python//python:python_version değerini inceleyebilirsiniz. Daha fazla bilgiyi burada bulabilirsiniz.

Hata uyarısı: Bu özellik, Bazel'ın hedefinizi oluşturduğu sürümü belirler, ancak #4815 nedeniyle, sonuçta ortaya çıkan saplama komut dosyası, çalışma zamanında yanlış çevirmen sürümünü çağırabilir. Gerektiğinde 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

String; optional; default is "PY2AND3"

Bu özellik, hedefin srcs öğesinin Python 2, Python 3 veya her ikisi ile uyumlu olduğunu tanımlar. 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". Geçmişe dönük nedenlerle "PY2ONLY" ve "PY3ONLY" değerlerine de izin verilir, ancak bunlar temelde "PY2" ve "PY3" ile aynıdır ve bundan kaçınılmalıdır.

Mevcut Python sürümünü bu özelliğin değerine göre yalnızca yürütülebilir kuralların (py_binary ve py_library ) gerçekten doğruladığına dikkat edin. (Bu bir özelliktir. py_library mevcut Python sürümünü değiştirmediğinden, doğrulamayı gerçekleştirmiş olması halinde aynı çağrıda hem PY2ONLY hem de PY3ONLY kitaplıkları oluşturmak mümkün olmaz.) 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 gereksinimleri getirdiği hakkında teşhis bilgileri almak için hedefinizde find_requirements özelliğini çalıştırabilirsiniz:

          bazel build <your target> \
              --aspects=@rules_python//python:defs.bzl%find_requirements \
              --output_groups=pyversioninfo
          
Bu işlem, -pyversioninfo.txt son ekine sahip bir dosya oluşturur. Bu dosya, hedefinizin neden bir Python sürümü veya başka bir sürüm gerektirdiği hakkında bilgi verir. Sürüm çakışması nedeniyle belirli bir hedefin oluşturulması başarısız olsa bile özelliğin çalıştığını unutmayın.

stamp

Integer; optional; default is -1

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağı. Olası değerler:
  • stamp = 1: Derleme bilgilerini --nostamp derlemelerinde bile her zaman ikili programa damgalayın. Bu ayar, ikili program için uzaktan önbelleğe almayı ve buna bağlı olan aşağı akış işlemlerini sonlandırabileceğinden bu ayardan kaçınılmalıdır.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu, iyi derleme sonucunu önbelleğe alma olanağı sağlar.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi --[no]stamp işaretiyle kontrol edilir.

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

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)

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

deps

List of labels; optional

İkili hedefe bağlanacak diğer kitaplıkların listesi. Çoğu derleme kuralı tarafından tanımlanan genel özellikler sayfasında deps ile ilgili genel yorumlara bakın. Bunlar genellikle py_library kurallarıdır.
srcs

List of labels; optional

Hedefi oluşturmak için işlenen kaynak (.py) dosyalarının listesi. Bu, tüm check-in kodunuzu ve oluşturulan kaynak dosyalarınızı içerir.
imports

List of strings; optional

PYTHONPATH içine eklenecek içe aktarma dizinlerinin listesi.

"Değişken oluşturma" değişikliğine tabidir. Bu içe aktarma dizinleri, bu kural ve ona bağlı tüm kurallar için eklenir (not: bu kuralın bağlı olduğu kurallar değildir). Her dizin bu kurala bağlı olan py_binary kuralları tarafından PYTHONPATH içine eklenir.

Hataya neden olan mutlak yollara (/ ile başlayan yollar) ve yürütme kökü üzerindeki bir yola referans veren yollara izin verilmez.

srcs_version

String; optional; default is "PY2AND3"

Bu özellik, hedefin srcs öğesinin Python 2, Python 3 veya her ikisi ile uyumlu olduğunu tanımlar. 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". Geçmişe dönük nedenlerle "PY2ONLY" ve "PY3ONLY" değerlerine de izin verilir, ancak bunlar temelde "PY2" ve "PY3" ile aynıdır ve bundan kaçınılmalıdır.

Mevcut Python sürümünü bu özelliğin değerine göre yalnızca yürütülebilir kuralların (py_binary ve py_library ) gerçekten doğruladığına dikkat edin. (Bu bir özelliktir. py_library mevcut Python sürümünü değiştirmediğinden, doğrulamayı gerçekleştirmiş olması halinde aynı çağrıda hem PY2ONLY hem de PY3ONLY kitaplıkları oluşturmak mümkün olmaz.) 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 gereksinimleri getirdiği hakkında teşhis bilgileri almak için hedefinizde find_requirements özelliğini çalıştırabilirsiniz:

          bazel build <your target> \
              --aspects=@rules_python//python:defs.bzl%find_requirements \
              --output_groups=pyversioninfo
          
Bu işlem, -pyversioninfo.txt son ekine sahip bir dosya oluşturur. Bu dosya, hedefinizin neden bir Python sürümü veya başka bir sürüm gerektirdiği hakkında bilgi verir. Sürüm çakışması nedeniyle belirli bir hedefin oluşturulması başarısız olsa bile özelliğin çalıştığını unutmayın.

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)

py_test() kuralı bir test derler. Test, bir test kodlarının çevresindeki ikili sarmalayıcıdır.

Örnekler

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

Ana modülü belirtmek de mümkündür:

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

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

deps

List of labels; optional

İkili hedefe bağlanacak diğer kitaplıkların listesi. Çoğu derleme kuralı tarafından tanımlanan genel özellikler sayfasında deps ile ilgili genel yorumlara bakın. Bunlar genellikle py_library kurallarıdır.
srcs

List of labels; required

Hedefi oluşturmak için işlenen kaynak (.py) dosyalarının listesi. Bu, tüm check-in kodunuzu ve oluşturulan kaynak dosyalarınızı içerir. Kitaplık hedefleri deps klasörüne aitken, çalışma zamanında gereken diğer ikili dosyalar data klasörüne ait.
imports

List of strings; optional

PYTHONPATH içine eklenecek içe aktarma dizinlerinin listesi.

"Değişken oluşturma" değişikliğine tabidir. Bu içe aktarma dizinleri, bu kural ve ona bağlı tüm kurallar için eklenir (not: bu kuralın bağlı olduğu kurallar değildir). Her dizin bu kurala bağlı olan py_binary kuralları tarafından PYTHONPATH içine eklenir.

Hataya neden olan mutlak yollara (/ ile başlayan yollar) ve yürütme kökü üzerindeki bir yola referans veren yollara izin verilmez.

legacy_create_init

Integer; optional; default is -1

Runfiles ağacında gizli olarak boş __init__.py dosyalarının oluşturulup oluşturulmayacağı. Bunlar, Python kaynak kodunu veya paylaşılan kitaplıkları içeren her dizinde ve depo kök dizini hariç bu dizinlerin her üst dizininde oluşturulur. --incompatible_default_to_explicit_init_py kullanılmadığı sürece varsayılan otomatik, "doğru" anlamına gelir. Yanlış değeri döndürülürse kullanıcı, (büyük olasılıkla boş) __init__.py dosyaları oluşturmaktan ve bu dosyaları gerektiği gibi Python hedeflerinin srcs bölümüne eklemekten sorumludur.
main

Label; optional

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 öğesindeki hiçbir dosya adıyla eşleşmiyorsa main belirtilmelidir.
python_version

String; optional; nonconfigurable; default is "_INTERNAL_SENTINEL"

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

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

Mevcut Python sürümünde select() işlemini yapmak istiyorsanız @rules_python//python:python_version değerini inceleyebilirsiniz. Daha fazla bilgiyi burada bulabilirsiniz.

Hata uyarısı: Bu özellik, Bazel'ın hedefinizi oluşturduğu sürümü belirler, ancak #4815 nedeniyle, sonuçta ortaya çıkan saplama komut dosyası, çalışma zamanında yanlış çevirmen sürümünü çağırabilir. Gerektiğinde 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

String; optional; default is "PY2AND3"

Bu özellik, hedefin srcs öğesinin Python 2, Python 3 veya her ikisi ile uyumlu olduğunu tanımlar. 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". Geçmişe dönük nedenlerle "PY2ONLY" ve "PY3ONLY" değerlerine de izin verilir, ancak bunlar temelde "PY2" ve "PY3" ile aynıdır ve bundan kaçınılmalıdır.

Mevcut Python sürümünü bu özelliğin değerine göre yalnızca yürütülebilir kuralların (py_binary ve py_library ) gerçekten doğruladığına dikkat edin. (Bu bir özelliktir. py_library mevcut Python sürümünü değiştirmediğinden, doğrulamayı gerçekleştirmiş olması halinde aynı çağrıda hem PY2ONLY hem de PY3ONLY kitaplıkları oluşturmak mümkün olmaz.) 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 gereksinimleri getirdiği hakkında teşhis bilgileri almak için hedefinizde find_requirements özelliğini çalıştırabilirsiniz:

          bazel build <your target> \
              --aspects=@rules_python//python:defs.bzl%find_requirements \
              --output_groups=pyversioninfo
          
Bu işlem, -pyversioninfo.txt son ekine sahip bir dosya oluşturur. Bu dosya, hedefinizin neden bir Python sürümü veya başka bir sürüm gerektirdiği hakkında bilgi verir. Sürüm çakışması nedeniyle belirli bir hedefin oluşturulması başarısız olsa bile özelliğin çalıştığını unutmayın.

stamp

Integer; optional; default is 0

py_binary() bağımsız değişkenleriyle ilgili bölüme bakın. Tek fark, damga bağımsız değişkeninin testler için varsayılan olarak 0'a ayarlanmasıdır.

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)

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

py_runtime hedefi, bir platform çalışma zamanını veya yapı içi çalışma zamanını temsil edebilir. Platform çalışma zamanı, sistem tarafından yüklenen bir yorumlayıcıya bilinen bir yoldan erişir. Derleme içi çalışma zamanı ise çevirmen görevi gören yürütülebilir bir hedefe yönlendirir. Her iki durumda da "yorumlayıcı", standart CPython yorumlayıcısıyla aynı kuralları uygulayarak komut satırında geçirilen bir Python komut dosyasını çalıştırabilen yürütülebilir bir ikili program veya sarmalayıcı komut dosyasını ifade eder.

Platform çalışma zamanı, doğası gereği hermetik değildir. Hedef platformda belirli bir yolda bir çevirmenin bulunmasını zorunlu kılar. Derleme içi bir çalışma zamanı, kontrol edilen çevirmenlere veya sistem yorumlayıcıya erişen bir sarmalayıcı komut dosyasına yönlendirme yapıp yapmadığına 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

Name; required

Bu hedef için benzersiz bir ad.

coverage_tool

Label; optional

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

Ayarlanırsa hedef ya tek bir dosya oluşturmalı ya da 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ı dahil olmak üzere, coverage.py komut satırı bağımsız değişkenlerini kabul etmelidir.

files

List of labels; optional

Derleme içi çalışma zamanı için bu, bu çalışma zamanını oluşturan dosya kümesidir. Bu dosyalar, bu çalışma zamanını kullanan Python ikililerinin çalıştırma dosyalarına eklenir. Platform çalışma zamanı için bu özellik ayarlanmamalıdır.
interpreter

Label; optional

Derleme içi çalışma zamanı için çevirmen olarak çağrılacak hedef budur. Platform çalışma zamanı için bu özellik ayarlanmamalıdır.
interpreter_path

String; optional

Platform çalışma zamanı için bu, hedef platformdaki Python çevirmeninin mutlak yoludur. Derleme içi çalışma zamanı için bu özellik ayarlanmamalıdır.
python_version

String; optional; default is "_INTERNAL_SENTINEL"

Bu çalışma zamanının Python ana sürüm 2 veya 3 için olup olmadığı. Geçerli değerler "PY2" ve "PY3" şeklindedir.

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

stub_shebang

String; optional; default is "#!/usr/bin/env python3"

py_binary hedefleri yürütülürken kullanılan önyükleme yapan Python saplama komut dosyasının başına "Shebang" ifadesi eklendi.

Motivasyon için sayı 8685'e bakın.

Windows için geçerli değildir.