Python Kuralları

Sorun bildirin Kaynağı göster

Kurallar

py_binary

Kural kaynağını göster
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 dosyadan (muhtemelen diğer py_library kurala ait olanlar) oluşan bir koleksiyon, çalıştırılma sırasında programın ihtiyaç duyduğu tüm kod ve verileri içeren bir *.runfiles dizin ağacı ve programı doğru ilk ortam ve verilerle başlatan bir 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 istiyorsanız (örneğin, java_test içinden bazı sahte kaynakları ayarlamak için python ikili programı çalıştırmak) doğru yaklaşım, diğer ikili programın veya testin veri bölümündeki py_binary öğesine bağımlı olmasını sağlamaktır. Diğer ikili program daha sonra kaynak dizine göre py_binary öğesini 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

Name; required

Bu hedef için benzersiz bir ad.


main belirtilmemişse bu, uzantının ana giriş noktası olan uzantı dosyasının adıyla (uzantıdan 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ının tanımladığı normal özellikler başlıklı makalede 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 durum, tüm check-in kodunuzu ve oluşturulan kaynak dosyalarınızı içerir. Bunun yerine, kitaplık hedefleri deps öğesine, çalışma zamanında gereken diğer ikili dosyalar ise data öğesine aittir.
imports

List of strings; optional

PYTHONPATH listesine eklenecek içe aktarma dizinlerinin listesi.

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

Mutlak yollara (/ ile başlayan yollar) ve yürütme kökünün üzerindeki bir yola referans veren yollara izin verilmez ve bu durum hataya neden olur.

legacy_create_init

Integer; optional; default is -1

Runfile ağacında boş __init__.py dosyaları oluşturup oluşturmayacağı. Bunlar, Python kaynak kodu veya paylaşılan kitaplıklar içeren her dizinde, depo kök dizini hariç bu dizinlerin her bir üst dizininde oluşturulur. --incompatible_default_to_explicit_init_py kullanılmadığı sürece varsayılan, otomatik anlamına gelir. Yanlış değerine ayarlanırsa, __init__.py dosyalarını oluşturmak (muhtemelen boş) ve bunları gereken şekilde srcs Python hedeflerine eklemekten kullanıcı sorumludur.
main

Label; optional

Uygulamanın ana giriş noktası olan kaynak dosyanın adı. Bu dosya srcs içinde de listelenmelidir. Belirtilmemesi durumunda name öğesi kullanılır (yukarıya bakın). name, srcs içindeki herhangi bir dosya adıyla eşleşmezse main belirtilmelidir.
python_version

String; optional; nonconfigurable; default is "_INTERNAL_SENTINEL"

Python 2 veya Python 3 için bu hedefi (ve geçici deps) oluşturup oluşturmayacağınız. Geçerli değerler "PY2" ve "PY3" değerleridir (varsayılan değer).

Python sürümü, komut satırında veya bu sürüme bağımlı diğer yüksek hedeflerde belirtilen sürümden bağımsız olarak her zaman bu özellik tarafından belirtilen sürüme sıfırlanır.

Geçerli Python sürümünde select() 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, oluşturulan koçan 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 özelliğini ayarlayarak bu py_runtime öğesini etkinleştirmeyi içeren bu geçici çözümü inceleyin.

srcs_version

String; optional; default is "PY2AND3"

Bu özellik, hedefin srcs değerinin Python 2, Python 3 veya her ikisi ile uyumlu olduğunu bildirir. Python çalışma zamanı sürümünü gerçekten 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ş nedenlerle izin verilir ancak bu değerler "PY2" ve "PY3" ile aynıdır ve kaçınılmalıdır.

Yalnızca yürütülebilir kuralların (py_binary ve py_library ), bu özelliğin değerine göre mevcut Python sürümünü doğruladığını unutmayın. (Bu bir özelliktir. py_library, mevcut Python sürümünü değiştirmediğinden, doğrulama işlemi gerçekleştirdiyse PY2ONLY ve PY3ONLY kitaplıklarını aynı çağrıda oluşturmak imkansızdır.) Ayrıca, bir sürüm uyumsuzluğu varsa hata yalnızca yürütme aşamasında bildirilir. Hata, özellikle bazel build --nobuild çağrısında görünmez.)

Hangi bağımlılıkların sürüm şartlarını karşıladığına ilişkin teşhis bilgilerini 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, hedefinizin neden bir Python sürümünü veya başka bir sürümü gerektirdiği hakkında bilgi sağlayan -pyversioninfo.txt son ekine sahip bir dosya oluşturur. Belirtilen hedefin, sürüm çakışması nedeniyle oluşturulamadığı durumlarda bile çalıştığını unutmayın.

stamp

Integer; optional; default is -1

Derleme bilgilerinin ikili program için kodlanıp kodlanmayacağını belirler. Olası değerler:
  • stamp = 1: --nostamp derlemelerinde bile derleme bilgilerini her zaman ikili programa damgalayın. İkili ayarlar ve ona bağlı tüm aşağı akış işlemleri için uzaktan önbelleğe alma potansiyelini kaldırabileceğinden bu ayardan kaçınılmalıdır.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu sayede derleme sonuçlarını iyi bir şekilde önbelleğe alabilirsiniz.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi --[no]stamp işareti tarafından kontrol edilir.

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

py_kitaplığı

Kural kaynağını göster
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ının tanımladığı normal özellikler başlıklı makalede 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 durum, tüm check-in kodunuzu ve oluşturulan kaynak dosyalarınızı içerir.
imports

List of strings; optional

PYTHONPATH listesine eklenecek içe aktarma dizinlerinin listesi.

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

Mutlak yollara (/ ile başlayan yollar) ve yürütme kökünün üzerindeki bir yola referans veren yollara izin verilmez ve bu durum hataya neden olur.

srcs_version

String; optional; default is "PY2AND3"

Bu özellik, hedefin srcs değerinin Python 2, Python 3 veya her ikisi ile uyumlu olduğunu bildirir. Python çalışma zamanı sürümünü gerçekten 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ş nedenlerle izin verilir ancak bu değerler "PY2" ve "PY3" ile aynıdır ve kaçınılmalıdır.

Yalnızca yürütülebilir kuralların (py_binary ve py_library ), bu özelliğin değerine göre mevcut Python sürümünü doğruladığını unutmayın. (Bu bir özelliktir. py_library, mevcut Python sürümünü değiştirmediğinden, doğrulama işlemi gerçekleştirdiyse PY2ONLY ve PY3ONLY kitaplıklarını aynı çağrıda oluşturmak imkansızdır.) Ayrıca, bir sürüm uyumsuzluğu varsa hata yalnızca yürütme aşamasında bildirilir. Hata, özellikle bazel build --nobuild çağrısında görünmez.)

Hangi bağımlılıkların sürüm şartlarını karşıladığına ilişkin teşhis bilgilerini 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, hedefinizin neden bir Python sürümünü veya başka bir sürümü gerektirdiği hakkında bilgi sağlayan -pyversioninfo.txt son ekine sahip bir dosya oluşturur. Belirtilen hedefin, sürüm çakışması nedeniyle oluşturulamadığı durumlarda bile çalıştığını unutmayın.

py_test

Kural kaynağını göster
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, bazı test kodlarının etrafında ikili bir sarmalayıcıdır.

Örnekler

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

Bir ana modül de belirtebilirsiniz:

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ının tanımladığı normal özellikler başlıklı makalede 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 durum, tüm check-in kodunuzu ve oluşturulan kaynak dosyalarınızı içerir. Bunun yerine, kitaplık hedefleri deps öğesine, çalışma zamanında gereken diğer ikili dosyalar ise data öğesine aittir.
imports

List of strings; optional

PYTHONPATH listesine eklenecek içe aktarma dizinlerinin listesi.

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

Mutlak yollara (/ ile başlayan yollar) ve yürütme kökünün üzerindeki bir yola referans veren yollara izin verilmez ve bu durum hataya neden olur.

legacy_create_init

Integer; optional; default is -1

Runfile ağacında boş __init__.py dosyaları oluşturup oluşturmayacağı. Bunlar, Python kaynak kodu veya paylaşılan kitaplıklar içeren her dizinde, depo kök dizini hariç bu dizinlerin her bir üst dizininde oluşturulur. --incompatible_default_to_explicit_init_py kullanılmadığı sürece varsayılan, otomatik anlamına gelir. Yanlış değerine ayarlanırsa, __init__.py dosyalarını oluşturmak (muhtemelen boş) ve bunları gereken şekilde srcs Python hedeflerine eklemekten kullanıcı sorumludur.
main

Label; optional

Uygulamanın ana giriş noktası olan kaynak dosyanın adı. Bu dosya srcs içinde de listelenmelidir. Belirtilmemesi durumunda name öğesi kullanılır (yukarıya bakın). name, srcs içindeki herhangi bir dosya adıyla eşleşmezse main belirtilmelidir.
python_version

String; optional; nonconfigurable; default is "_INTERNAL_SENTINEL"

Python 2 veya Python 3 için bu hedefi (ve geçici deps) oluşturup oluşturmayacağınız. Geçerli değerler "PY2" ve "PY3" değerleridir (varsayılan değer).

Python sürümü, komut satırında veya bu sürüme bağımlı diğer yüksek hedeflerde belirtilen sürümden bağımsız olarak her zaman bu özellik tarafından belirtilen sürüme sıfırlanır.

Geçerli Python sürümünde select() 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, oluşturulan koçan 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 özelliğini ayarlayarak bu py_runtime öğesini etkinleştirmeyi içeren bu geçici çözümü inceleyin.

srcs_version

String; optional; default is "PY2AND3"

Bu özellik, hedefin srcs değerinin Python 2, Python 3 veya her ikisi ile uyumlu olduğunu bildirir. Python çalışma zamanı sürümünü gerçekten 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ş nedenlerle izin verilir ancak bu değerler "PY2" ve "PY3" ile aynıdır ve kaçınılmalıdır.

Yalnızca yürütülebilir kuralların (py_binary ve py_library ), bu özelliğin değerine göre mevcut Python sürümünü doğruladığını unutmayın. (Bu bir özelliktir. py_library, mevcut Python sürümünü değiştirmediğinden, doğrulama işlemi gerçekleştirdiyse PY2ONLY ve PY3ONLY kitaplıklarını aynı çağrıda oluşturmak imkansızdır.) Ayrıca, bir sürüm uyumsuzluğu varsa hata yalnızca yürütme aşamasında bildirilir. Hata, özellikle bazel build --nobuild çağrısında görünmez.)

Hangi bağımlılıkların sürüm şartlarını karşıladığına ilişkin teşhis bilgilerini 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, hedefinizin neden bir Python sürümünü veya başka bir sürümü gerektirdiği hakkında bilgi sağlayan -pyversioninfo.txt son ekine sahip bir dosya oluşturur. Belirtilen hedefin, sürüm çakışması nedeniyle oluşturulamadığı durumlarda bile çalıştığını unutmayın.

stamp

Integer; optional; default is 0

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

py_çalışma zamanı

Kural kaynağını göster
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 çalıştırmak için kullanılan Python çalışma zamanını temsil eder.

py_runtime hedefi, platform çalışma zamanını veya yerleşik çalışma zamanını temsil edebilir. Platformun çalışma zamanı, bilinen bir yolda sistem tarafından yüklenen yorumlayıcıya erişirken, dahili çalışma zamanı çevirmen olarak çalışan yürütülebilir bir hedefe işaret eder. Her iki durumda da "yorumcu", standart SQLython yorumcusuyla aynı kurallara göre komut satırında aktarılan bir Python komut dosyasını çalıştırabilen, yürütülebilir ikili dosyalar veya sarmalayıcı komut dosyaları anlamına gelir.

Platformun çalışma zamanı doğası gereği melodik değildir. Hedef platformda, bir çevirmenin belirli bir yolda bulunmasını zorunlu kılar. Dahili bir çalışma zamanı, check-in yapan bir çevirmene veya sistem çevirmene erişen bir sarmalayıcı komut dosyasına işaret edip etmediğ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

Name; required

Bu hedef için benzersiz bir ad.

bootstrap_template

Label; optional; default is @bazel_tools//tools/python:python_bootstrap_template.txt

Önceden "Python stub komut dosyası" olarak anılan bu işlev, tüm Python yürütülebilir hedeflerinin giriş noktasıdır.
coverage_tool

Label; optional

Bu hedef, py_binary ve py_test hedeflerinden kod kapsamı hakkında bilgi toplamak için kullanılır.

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ülebiliyorsa yürütülebilir dosya, python kapsam aracının giriş noktasını belirler. Kapsam etkinleştirildiğinde hedef ve bu dosyanın çalıştırma dosyaları Runfile'a eklenir.

Aracın giriş noktası, bir python çevirmeni tarafından (ör. .py veya .pyc dosyası) yüklenebilir olmalıdır. 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

List of labels; optional

Dahili çalışma zamanı için bu çalışma zamanını oluşturan dosya grubudur. Bu dosyalar, bu çalışma zamanını kullanan Python ikili programlarının Runfile'larına eklenecek. Platform çalışma zamanı için bu özellik ayarlanmamalıdır.
interpreter

Label; optional

Dahili bir çalışma zamanı için bu, çevirmen olarak çağrılacak hedeftir. Platform çalışma zamanı için bu özellik ayarlanmamalıdır.
interpreter_path

String; optional

Platformun çalışma zamanı için bu, hedef platformdaki bir Python yorumcusunun mutlak yoludur. Yerleşik bir ç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" değerleridir.

Varsayılan değer, --incompatible_py3_is_default işaretiyle 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 çalıştırılırken kullanılan önyükleme Python komut dosyasının başındaki "Shebang" ifadesi.

Motivasyon için 8685 sayısına bakın.

Windows için geçerli değildir.