Python Kuralları

Sorun bildirin.3 2.02}332}12/}22}18}

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 dosyası (muhtemelen diğer py_library kurallarına ait) koleksiyonu, çalışma anında programın ihtiyaç duyduğu tüm kod ve verileri içeren *.runfiles dizin ağacı ile 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 bir py_binary çalıştırmak istiyorsanız (örneğin, java_test içinden bir model kaynak oluşturmak için bir python ikili programı çalıştırmak) doğru yaklaşım, diğer ikili programı veya testi veri bölümündeki py_binary öğesine bağımlı hale getirmektir. Böylece diğer ikili program, 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

Ad; gerekli

Bu hedef için benzersiz bir ad.


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

Etiket listesi; varsayılan []

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

Etiket listesi; zorunlu

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 bunun yerine deps konumuna aittir. Çalışma zamanında gereken diğer ikili program dosyaları ise data konumundadır.
imports

Dize listesi; varsayılan değer: []

PYTHONPATH bölümüne eklenecek içe aktarma dizinlerinin listesi.

"Değişken yap" 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ıyla PYTHONPATH bölümüne eklenir.

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

legacy_create_init

Tam sayı; varsayılan değer -1

Runfiles ağacında dolaylı olarak boş __init__.py dosyaları oluşturulup oluşturulmayacağı. Bu dizinler, Python kaynak kodunu veya paylaşılan kitaplıkları içeren her dizinde ve depo kök dizini hariç olmak üzere bu dizinlerin her üst dizininde oluşturulur. Varsayılan olan "auto", --incompatible_default_to_explicit_init_py kullanılmadığı sürece doğru anlamına gelir. False (yanlış) değerine ayarlanırsa __init__.py dosyalarını oluşturmak (büyük olasılıkla boş) ve bunları gereken şekilde Python hedeflerine srcs eklemekten kullanıcı sorumludur.
main

Etiket; varsayılan değer None

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

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

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

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

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

Hata uyarısı: Bu özellik, Bazel'in hedefinizi oluşturduğu sürümü belirler. Ancak #4815 nedeniyle, sonuçta ortaya çıkan saplama komut dosyası yine de çalışma zamanında yanlış çevirmen sürümünü çağırabilir. Gerektiğinde Python sürümlerinden birine işaret eden bir py_runtime hedefi tanımlamak ve --python_top ayarlayarak bu py_runtime'u etkinleştirmek için bu geçici çözüme göz atın.

srcs_version

Dize; varsayılan değer "PY2AND3"

Bu özellik, hedefin srcs öğesinin Python 2, Python 3 veya her ikisiyle 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 python_version özelliğini (py_binary veya py_test) kullanın.

İzin verilen değerler: "PY2AND3", "PY2" ve "PY3". "PY2ONLY" ve "PY3ONLY" değerlerine tarihsel nedenlerle de izin verilir ancak bu değerler temelde "PY2" ve "PY3" ile aynıdır ve bu değerlerden kaçınılmalıdır.

Gerçekte 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 yapıldıysa aynı çağrıda hem PY2ONLY hem de PY3ONLY kitaplıkları derlenemez.) Ayrıca, sürüm uyuşmazlığı varsa hata yalnızca yürütme aşamasında bildirilir. Özellikle, hata bir bazel build --nobuild çağrısında görünmez.)

Hangi bağımlılıkların sürüm gereksinimlerini karşıladığı 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şturarak hedefinizin neden bir Python sürümü veya başka bir sürüm gerektirdiği hakkında bilgi verir. Belirtilen hedef, sürüm çakışması nedeniyle derleme başarısız olsa bile çalışır.

stamp

Tam sayı; varsayılan değer -1

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağını belirler. Olası değerler:
  • stamp = 1: --nostamp derlemelerinde bile, derleme bilgilerini her zaman ikili programda damgalayın. Potansiyel olarak ikili program ve buna bağlı tüm aşağı akış işlemleri için uzaktan önbelleğe almayı sonlandıracağından bu ayardan kaçınılmalıdır.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu yöntem, derleme sonucunu önbelleğe alma konusunda iyi bir sonuç verir.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi --[no]stamp işaretiyle kontrol edilir.

Bağımlılıkları değişmediği sürece damgalı ikili programlar yeniden oluşturulmaz.

py_library

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

Ad; gerekli

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan []

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

Etiket listesi; varsayılan []

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

Dize listesi; varsayılan değer: []

PYTHONPATH bölümüne eklenecek içe aktarma dizinlerinin listesi.

"Değişken yap" 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ıyla PYTHONPATH bölümüne eklenir.

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

srcs_version

Dize; varsayılan değer "PY2AND3"

Bu özellik, hedefin srcs öğesinin Python 2, Python 3 veya her ikisiyle 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 python_version özelliğini (py_binary veya py_test) kullanın.

İzin verilen değerler: "PY2AND3", "PY2" ve "PY3". "PY2ONLY" ve "PY3ONLY" değerlerine tarihsel nedenlerle de izin verilir ancak bu değerler temelde "PY2" ve "PY3" ile aynıdır ve bu değerlerden kaçınılmalıdır.

Gerçekte 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 yapıldıysa aynı çağrıda hem PY2ONLY hem de PY3ONLY kitaplıkları derlenemez.) Ayrıca, sürüm uyuşmazlığı varsa hata yalnızca yürütme aşamasında bildirilir. Özellikle, hata bir bazel build --nobuild çağrısında görünmez.)

Hangi bağımlılıkların sürüm gereksinimlerini karşıladığı 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şturarak hedefinizin neden bir Python sürümü veya başka bir sürüm gerektirdiği hakkında bilgi verir. Belirtilen hedef, sürüm çakışması nedeniyle derleme başarısız olsa bile çalışır.

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, bir test kodunun etrafında kullanılan ikili 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

Ad; gerekli

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan []

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

Etiket listesi; zorunlu

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 bunun yerine deps konumuna aittir. Çalışma zamanında gereken diğer ikili program dosyaları ise data konumundadır.
imports

Dize listesi; varsayılan değer: []

PYTHONPATH bölümüne eklenecek içe aktarma dizinlerinin listesi.

"Değişken yap" 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ıyla PYTHONPATH bölümüne eklenir.

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

legacy_create_init

Tam sayı; varsayılan değer -1

Runfiles ağacında dolaylı olarak boş __init__.py dosyaları oluşturulup oluşturulmayacağı. Bu dizinler, Python kaynak kodunu veya paylaşılan kitaplıkları içeren her dizinde ve depo kök dizini hariç olmak üzere bu dizinlerin her üst dizininde oluşturulur. Varsayılan olan "auto", --incompatible_default_to_explicit_init_py kullanılmadığı sürece doğru anlamına gelir. False (yanlış) değerine ayarlanırsa __init__.py dosyalarını oluşturmak (büyük olasılıkla boş) ve bunları gereken şekilde Python hedeflerine srcs eklemekten kullanıcı sorumludur.
main

Etiket; varsayılan değer None

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

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

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

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

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

Hata uyarısı: Bu özellik, Bazel'in hedefinizi oluşturduğu sürümü belirler. Ancak #4815 nedeniyle, sonuçta ortaya çıkan saplama komut dosyası yine de çalışma zamanında yanlış çevirmen sürümünü çağırabilir. Gerektiğinde Python sürümlerinden birine işaret eden bir py_runtime hedefi tanımlamak ve --python_top ayarlayarak bu py_runtime'u etkinleştirmek için bu geçici çözüme göz atın.

srcs_version

Dize; varsayılan değer "PY2AND3"

Bu özellik, hedefin srcs öğesinin Python 2, Python 3 veya her ikisiyle 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 python_version özelliğini (py_binary veya py_test) kullanın.

İzin verilen değerler: "PY2AND3", "PY2" ve "PY3". "PY2ONLY" ve "PY3ONLY" değerlerine tarihsel nedenlerle de izin verilir ancak bu değerler temelde "PY2" ve "PY3" ile aynıdır ve bu değerlerden kaçınılmalıdır.

Gerçekte 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 yapıldıysa aynı çağrıda hem PY2ONLY hem de PY3ONLY kitaplıkları derlenemez.) Ayrıca, sürüm uyuşmazlığı varsa hata yalnızca yürütme aşamasında bildirilir. Özellikle, hata bir bazel build --nobuild çağrısında görünmez.)

Hangi bağımlılıkların sürüm gereksinimlerini karşıladığı 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şturarak hedefinizin neden bir Python sürümü veya başka bir sürüm gerektirdiği hakkında bilgi verir. Belirtilen hedef, sürüm çakışması nedeniyle derleme başarısız olsa bile çalışır.

stamp

Tam sayı; varsayılan değer 0

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

py_runtime

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 yürütmek için kullanılan bir Python çalışma zamanını temsil eder.

py_runtime hedefi, platform çalışma zamanını veya derleme içindeki çalışma zamanını temsil edebilir. Platform çalışma zamanı, bilinen bir yoldan sistem tarafından yüklenmiş yorumlayıcıya erişirken derleme içi çalışma zamanı, yorumlayıcı olarak görev yapan yürütülebilir bir hedefe işaret eder. 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 ikili program 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 çevirmenin bulunmasını şart koşar. Derleme içi çalışma zamanı hermetik olabilir veya olmayabilir. Bu durum, çalışma zamanının giriş yapılmış çevirmene mi yoksa sistem çevirmenine erişen bir sarmalayıcı komut dosyasına mı yönlendirmesine bağlı olarak değişebilir.

Ö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; gerekli

Bu hedef için benzersiz bir ad.

bootstrap_template

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

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

Etiket; varsayılan değer None

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

Ayarlanırsa hedef, 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 dosya, 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'nin komut satırı bağımsız değişkenlerini kabul etmelidir.

files

Etiket listesi; varsayılan []

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

Etiket; varsayılan değer None

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

Dize; varsayılan değer ""

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

Dize; varsayılan değer "_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 bu özellik gelecekte zorunlu olacak ve varsayılan değeri olmayacaktır.

stub_shebang

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

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

Motivasyon için 8685 numaralı sorunu inceleyin.

Windows için geçerli değildir.