Python Kuralları

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, bir dizi .py kaynak dosyasından (diğer py_library kurallarına ait olabilir), programın çalışma zamanında ihtiyaç duyduğu tüm kodu ve verileri içeren bir *.runfiles dizin ağacından ve programı doğru başlangıç ortamı ve verileriyle 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 dosya veya testin (örneğin, bir java_test'in içinden bazı sahte kaynakları ayarlamak için bir python ikili dosyasını çalıştırma) içinden py_binary çalıştırmak istiyorsanız doğru yaklaşım, diğer ikili dosyanın veya testin veri bölümünde py_binary'ya bağlı olmasını sağlamaktır. 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 (uzantı hariç). Örneğin, giriş noktanızın adı main.py ise adınız main olmalıdır.
deps

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

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

Etiketlerin listesi; zorunlu

Hedefi oluşturmak için işlenen kaynak (.py) dosyalarının listesi. Bu kapsamda, check-in yaptığınız tüm kodlar ve oluşturulan tüm kaynak dosyalar yer alır. Kitaplık hedefleri deps'da, çalışma zamanında gereken diğer ikili dosyalar ise data'de yer alır.
imports

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

PYTHONPATH'ya eklenecek içe aktarma dizinlerinin listesi.

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

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

legacy_create_init

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

Çalıştırma dosyaları ağacında boş __init__.py dosyalarının örtülü olarak oluşturulup oluşturulmayacağı. Bunlar, Python kaynak kodu 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 değer olan auto, --incompatible_default_to_explicit_init_py kullanılmadığı sürece true (doğru) anlamına gelir. Yanlışsa kullanıcı, __init__.py dosyalarını (boş olabilir) oluşturmaktan ve bunları gerektiği şekilde Python hedeflerinin srcs bölümüne eklemekten sorumludur.
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. Belirtilmezse 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) Python 2 veya Python 3 için oluşturulup oluşturulmayacağı. Geçerli değerler "PY2" ve "PY3" (varsayılan) şeklindedir.

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

select() kullanmak istiyorsanız @rules_python//python:python_version değerini inceleyebilirsiniz. Daha fazla bilgi için burayı inceleyin.

Hata uyarısı: Bu özellik, Bazel'in hedefiniz için oluşturduğu sürümü ayarlar ancak #4815 nedeniyle, ortaya çıkan saplama komut dosyası çalışma zamanında yanlış yorumlayıcı sürümünü çağırmaya devam edebilir. Gerekli olduğunda Python sürümüne işaret eden bir py_runtime hedefi tanımlamayı ve --python_top ayarını yaparak bu py_runtime hedefi etkinleştirmeyi içeren bu geçici çözüme bakın.

srcs_version

Dize; varsayılan değer "PY2AND3"

Bu özellik, hedefin srcs'nın Python 2, Python 3 veya her ikisiyle de 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". Geçmişe dönük kullanım nedeniyle "PY2ONLY" ve "PY3ONLY" değerlerine de izin verilir ancak bunlar esasen "PY2" ve "PY3" ile aynıdır ve 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ğeriyle karşılaştırarak doğruladığını unutmayın. (Bu bir özelliktir. py_library, mevcut Python sürümünü değiştirmediğinden doğrulama yaparsa aynı çağırmada hem PY2ONLY hem de PY3ONLY kitaplıklarını 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, bazel build --nobuild çağrısında hata görünmez.)

Hangi bağımlılıkların sürüm koşulları getirdiğiyle ilgili teşhis bilgilerini 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 bir Python sürümüne veya başka bir Python sürümüne ihtiyaç duyduğu hakkında bilgi veren -pyversioninfo.txt sonekli bir dosya oluşturur. Belirtilen hedef, sürüm çakışması nedeniyle oluşturulamamış olsa bile bu işlevin çalıştığını unutmayın.
stamp

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

Derleme bilgilerinin ikili dosyaya kodlanıp kodlanmayacağı. Olası değerler:
  • stamp = 1: Derleme bilgileri, --nostamp derlemelerinde bile her zaman ikiliye damgalanır. Bu ayardan kaçınılmalıdır. Bu ayar, ikili dosya ve buna bağlı tüm aşağı akış işlemleri için uzaktan önbelleğe almayı devre dışı bırakabilir.
  • 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şaretiyle kontrol edilir.

Damgalı 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

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

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

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

Hedefi oluşturmak için işlenen kaynak (.py) dosyalarının listesi. Bu kapsamda, check-in yaptığınız tüm kodlar ve oluşturulan tüm kaynak dosyalar yer alır.
imports

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

PYTHONPATH'ya eklenecek içe aktarma dizinlerinin listesi.

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

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

srcs_version

Dize; varsayılan değer "PY2AND3"

Bu özellik, hedefin srcs'nın Python 2, Python 3 veya her ikisiyle de 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". Geçmişe dönük kullanım nedeniyle "PY2ONLY" ve "PY3ONLY" değerlerine de izin verilir ancak bunlar esasen "PY2" ve "PY3" ile aynıdır ve 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ğeriyle karşılaştırarak doğruladığını unutmayın. (Bu bir özelliktir. py_library, mevcut Python sürümünü değiştirmediğinden doğrulama yaparsa aynı çağırmada hem PY2ONLY hem de PY3ONLY kitaplıklarını 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, bazel build --nobuild çağrısında hata görünmez.)

Hangi bağımlılıkların sürüm koşulları getirdiğiyle ilgili teşhis bilgilerini 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 bir Python sürümüne veya başka bir Python sürümüne ihtiyaç duyduğu hakkında bilgi veren -pyversioninfo.txt sonekli bir dosya oluşturur. Belirtilen hedef, sürüm çakışması nedeniyle oluşturulamamış olsa bile bu işlevin çalıştığı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)

Bir py_test() kuralı, testi derler. Test, bazı test kodlarının etrafındaki 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 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; zorunlu

Bu hedef için benzersiz bir ad.

deps

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

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

Etiketlerin listesi; zorunlu

Hedefi oluşturmak için işlenen kaynak (.py) dosyalarının listesi. Bu kapsamda, check-in yaptığınız tüm kodlar ve oluşturulan tüm kaynak dosyalar yer alır. Kitaplık hedefleri deps'da, çalışma zamanında gereken diğer ikili dosyalar ise data'de yer alır.
imports

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

PYTHONPATH'ya eklenecek içe aktarma dizinlerinin listesi.

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

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

legacy_create_init

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

Çalıştırma dosyaları ağacında boş __init__.py dosyalarının örtülü olarak oluşturulup oluşturulmayacağı. Bunlar, Python kaynak kodu 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 değer olan auto, --incompatible_default_to_explicit_init_py kullanılmadığı sürece true (doğru) anlamına gelir. Yanlışsa kullanıcı, __init__.py dosyalarını (boş olabilir) oluşturmaktan ve bunları gerektiği şekilde Python hedeflerinin srcs bölümüne eklemekten sorumludur.
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. Belirtilmezse 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) Python 2 veya Python 3 için oluşturulup oluşturulmayacağı. Geçerli değerler "PY2" ve "PY3" (varsayılan) şeklindedir.

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

select() kullanmak istiyorsanız @rules_python//python:python_version değerini inceleyebilirsiniz. Daha fazla bilgi için burayı inceleyin.

Hata uyarısı: Bu özellik, Bazel'in hedefiniz için oluşturduğu sürümü ayarlar ancak #4815 nedeniyle, ortaya çıkan saplama komut dosyası çalışma zamanında yanlış yorumlayıcı sürümünü çağırmaya devam edebilir. Gerekli olduğunda Python sürümüne işaret eden bir py_runtime hedefi tanımlamayı ve --python_top ayarını yaparak bu py_runtime hedefi etkinleştirmeyi içeren bu geçici çözüme bakın.

srcs_version

Dize; varsayılan değer "PY2AND3"

Bu özellik, hedefin srcs'nın Python 2, Python 3 veya her ikisiyle de 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". Geçmişe dönük kullanım nedeniyle "PY2ONLY" ve "PY3ONLY" değerlerine de izin verilir ancak bunlar esasen "PY2" ve "PY3" ile aynıdır ve 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ğeriyle karşılaştırarak doğruladığını unutmayın. (Bu bir özelliktir. py_library, mevcut Python sürümünü değiştirmediğinden doğrulama yaparsa aynı çağırmada hem PY2ONLY hem de PY3ONLY kitaplıklarını 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, bazel build --nobuild çağrısında hata görünmez.)

Hangi bağımlılıkların sürüm koşulları getirdiğiyle ilgili teşhis bilgilerini 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 bir Python sürümüne veya başka bir Python sürümüne ihtiyaç duyduğu hakkında bilgi veren -pyversioninfo.txt sonekli bir dosya oluşturur. Belirtilen hedef, sürüm çakışması nedeniyle oluşturulamamış olsa bile bu işlevin çalıştığını unutmayın.
stamp

Tam sayı; varsayılan değer 0

py_binary() bağımsız değişkenleri ile ilgili bölüme bakın. Ancak, damga bağımsız değişkeni testler için varsayılan olarak 0'a ayarlanır.

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ını veya derleme içi çalışma zamanını temsil edebilir. Platform çalışma zamanı, bilinen bir yoldaki sisteme yüklenmiş yorumlayıcıya erişirken yerleşik çalışma zamanı, yorumlayıcı görevi gören yürütülebilir bir hedefi işaret eder. Her iki durumda da "yorumlayıcı", komut satırında iletilen bir Python komut dosyasını standart CPython yorumlayıcısıyla aynı kurallara uyarak çalıştırabilen herhangi bir 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 platformun belirli bir yolda yorumlayıcı bulundurmasını zorunlu kılar. Yerleşik bir çalışma zamanı, sisteme giriş yapılmış bir yorumlayıcıya veya sistem yorumlayıcısına 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

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 hedefinin giriş noktasıdır.
coverage_tool

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

Bu, py_binary ve py_test hedeflerinden kod kapsamı bilgilerini 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ülebilir ise yürütülebilir dosya, python kapsam aracının giriş noktasını belirler. Kapsam etkinleştirildiğinde hedef ve bu hedefin çalışma dosyaları, çalışma 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ı da dahil olmak üzere coverage.py'nin komut satırı bağımsız değişkenlerini kabul etmelidir.

files

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

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

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

Yerleşik bir çalışma zamanı için bu, yorumlayıcı olarak çağrılacak hedeftir. Bir 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ısının mutlak yoludur. Yerleşik bir ç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'ın 2. ana sürümü için mi yoksa 3. ana sürümü için mi olduğu. Geçerli değerler "PY2" ve "PY3" şeklindedir.

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

stub_shebang

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

"Shebang" ifadesi, py_binary hedefleri yürütülürken kullanılan başlatma Python komut dosyasının başına eklenir.

Motivasyon için 8685 numaralı soruna göz atın.

Windows için geçerli değildir.