Python Kuralları

. Sorun bildir Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Kurallar

py_binary

Kural kaynağını görüntüle
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, aşağıdakilerden oluşan yürütülebilir bir Python programıdır: .py kaynak dosyadan oluşan bir koleksiyonun (muhtemelen ait olduğu) diğer py_library kuralına) bir *.runfiles için gerekli tüm kodu ve verileri içeren dizin ağacı ve programı önceki Sprint’te başlatan bir saplama ve verilerin doğru şekilde hazırlanmasını sağlar.

Ö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 içinden py_binary çalıştırmak isterseniz veya test edin (örneğin, bir Python ikili dosyası çalıştırarak kullanırsanız) doğru yaklaşım, diğer ikili programı veya testi, veri bölümündeki py_binary temel alınarak yapılır. Diğer ikili program, kaynağa göre py_binary değerini bulabilir dizin.

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 belirtilmediyse ad ile aynı olmalıdır uygulamanın ana giriş noktası olan kaynak dosyayı çıkarmanız gerekir. Örneğin, giriş noktanız main.py, adınız main olmalıdır.
deps

Etiket listesi; varsayılan değer []

İkili hedefe 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ı.
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 deps öğesine ait olurken çalışma zamanında gereken diğer ikili program dosyaları data.
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 bu kural ve ona bağlı tüm kurallar için dizinler eklenir (not: bu kuralın bağlı olduğu kurallardır. Her dizin PYTHONPATH hizmetine şu şekilde eklenecek: Bu kurala bağlı py_binary kuralları.

Mutlak yollar (/ ile başlayan yollar) ve bir yola referans veren yollar ifadelerinin kullanılmasına izin verilmez ve bu işlem hatayla sonuçlanır.

legacy_create_init

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

Runfiles ağacında dolaylı olarak boş __init__.py dosyaları oluşturulup oluşturulmayacağı. Bunlar, Python kaynak kodunu içeren her dizinde veya paylaşılan kitaplıklar ve depo kökü hariç bu dizinlerin her üst dizini dizin. Varsayılan, otomatik, --incompatible_default_to_explicit_init_py kullanılıyor. Yanlış ise kullanıcı __init__.py dosyalarını oluşturmaktan ve bunları Gerektiğinde srcs Python hedefi.
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 şunu yapmazsa: srcs içindeki herhangi bir dosya adıyla eşleşirse, main belirtilmelidir.
python_version

String; nonconfig; varsayılan değer "_INTERNAL_SENTINEL"

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

Python sürümü her zaman varsayılan olarak sıfırlanır. tarafından belirtilen sürüm dikkate alınmaksızın, bu özellik tarafından belirtilen sürümden bağımsız olarak farklı daha yüksek hedefler belirlemenize yardımcı olur.

Mevcut Python sürümünde select() uygulamak istiyorsanız @rules_python//python:python_version değerine ayarlanır. Görüntüleyin burada konulu videomuzu izleyin.

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ı, çalışma zamanında yine de yanlış çevirmen sürümünü çağırabilir. Görüntüleyin bu geçici çözüm, bu yöntemde py_runtime Python sürümünü kullanabilir ve aşağıdaki kodu ayarlayarak bu py_runtime'yi etkinleştirebilirsiniz: --python_top.

srcs_version

String; varsayılan değer "PY2AND3"

Bu özellik, hedefin srcs değerinin Python ile uyumlu olduğunu bildirir 2, Python 3 veya her ikisi de olabilir. Python çalışma zamanı sürümünü ayarlamak için Birpython_version yürütülebilir Python kuralı (py_binary veya py_test).

İzin verilen değerler: "PY2AND3", "PY2" ve "PY3". Geçmiş için "PY2ONLY" ve "PY3ONLY" değerlerine de izin verilir ancak bunlar temelde "PY2" ve "PY3" ile aynıdır. ve kaçınılması gerekir.

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. (py_library, mevcut Python'u değiştirmediği için bu bir özelliktir. doğrulama yapılmış olsaydı hem PY2ONLY sürümü hem de ve PY3ONLY kitaplık aynı çağrıda.) Ayrıca, açıklamada sürüm uyuşmazlığı nedeniyle hata yalnızca yürütme aşamasında bildirilir. Özellikle, bazel build --nobuild çağrısında görünmez.)

Hangi bağımlılıkların sürüm gereksinimini sunduğu hakkında teşhis bilgisi 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, bilgi sağlayan -pyversioninfo.txt son ekine sahip bir dosya oluşturur hedefiniz için neden bir Python sürümü veya başka bir sürüm gerektiği hakkında. Bu yöntem şu anda belirtilen hedef, sürüm çakışması nedeniyle oluşturulamadı.

stamp

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

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağını belirler. Olası değerler:
  • stamp = 1: Derleme bilgilerini --nostamp derleme. Bu ayarından kaçınılmalıdır. Aksi takdirde, bu işlem ve buna bağımlı tüm aşağı akış işlemleri.
  • 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şaretidir.

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

py_library

Kural kaynağını görüntüle
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 []

İkili hedefe 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ı.
srcs

Etiket listesi; varsayılan değer []

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 bu kural ve ona bağlı tüm kurallar için dizinler eklenir (not: bu kuralın bağlı olduğu kurallardır. Her dizin PYTHONPATH hizmetine şu şekilde eklenecek: Bu kurala bağlı py_binary kuralları.

Mutlak yollar (/ ile başlayan yollar) ve bir yola referans veren yollar ifadelerinin kullanılmasına izin verilmez ve bu işlem hatayla sonuçlanır.

srcs_version

String; varsayılan değer "PY2AND3"

Bu özellik, hedefin srcs değerinin Python ile uyumlu olduğunu bildirir 2, Python 3 veya her ikisi de olabilir. Python çalışma zamanı sürümünü ayarlamak için Birpython_version yürütülebilir Python kuralı (py_binary veya py_test).

İzin verilen değerler: "PY2AND3", "PY2" ve "PY3". Geçmiş için "PY2ONLY" ve "PY3ONLY" değerlerine de izin verilir ancak bunlar temelde "PY2" ve "PY3" ile aynıdır. ve kaçınılması gerekir.

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. (py_library, mevcut Python'u değiştirmediği için bu bir özelliktir. doğrulama yapılmış olsaydı hem PY2ONLY sürümü hem de ve PY3ONLY kitaplık aynı çağrıda.) Ayrıca, açıklamada sürüm uyuşmazlığı nedeniyle hata yalnızca yürütme aşamasında bildirilir. Özellikle, bazel build --nobuild çağrısında görünmez.)

Hangi bağımlılıkların sürüm gereksinimini sunduğu hakkında teşhis bilgisi 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, bilgi sağlayan -pyversioninfo.txt son ekine sahip bir dosya oluşturur hedefiniz için neden bir Python sürümü veya başka bir sürüm gerektiği hakkında. Bu yöntem şu anda belirtilen hedef, sürüm çakışması nedeniyle oluşturulamadı.

py_test

Kural kaynağını görüntüle
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 ikili sarmalayıcıdır test kodlarına ayırıyorum.

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

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan değer []

İkili hedefe 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ı.
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 deps öğesine ait olurken çalışma zamanında gereken diğer ikili program dosyaları data.
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 bu kural ve ona bağlı tüm kurallar için dizinler eklenir (not: bu kuralın bağlı olduğu kurallardır. Her dizin PYTHONPATH hizmetine şu şekilde eklenecek: Bu kurala bağlı py_binary kuralları.

Mutlak yollar (/ ile başlayan yollar) ve bir yola referans veren yollar ifadelerinin kullanılmasına izin verilmez ve bu işlem hatayla sonuçlanır.

legacy_create_init

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

Runfiles ağacında dolaylı olarak boş __init__.py dosyaları oluşturulup oluşturulmayacağı. Bunlar, Python kaynak kodunu içeren her dizinde veya paylaşılan kitaplıklar ve depo kökü hariç bu dizinlerin her üst dizini dizin. Varsayılan, otomatik, --incompatible_default_to_explicit_init_py kullanılıyor. Yanlış ise kullanıcı __init__.py dosyalarını oluşturmaktan ve bunları Gerektiğinde srcs Python hedefi.
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 şunu yapmazsa: srcs içindeki herhangi bir dosya adıyla eşleşirse, main belirtilmelidir.
python_version

String; nonconfig; varsayılan değer "_INTERNAL_SENTINEL"

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

Python sürümü her zaman varsayılan olarak sıfırlanır. tarafından belirtilen sürüm dikkate alınmaksızın, bu özellik tarafından belirtilen sürümden bağımsız olarak farklı daha yüksek hedefler belirlemenize yardımcı olur.

Mevcut Python sürümünde select() uygulamak istiyorsanız @rules_python//python:python_version değerine ayarlanır. Görüntüleyin burada konulu videomuzu izleyin.

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ı, çalışma zamanında yine de yanlış çevirmen sürümünü çağırabilir. Görüntüleyin bu geçici çözüm, bu yöntemde py_runtime Python sürümünü kullanabilir ve aşağıdaki kodu ayarlayarak bu py_runtime'yi etkinleştirebilirsiniz: --python_top.

srcs_version

String; varsayılan değer "PY2AND3"

Bu özellik, hedefin srcs değerinin Python ile uyumlu olduğunu bildirir 2, Python 3 veya her ikisi de olabilir. Python çalışma zamanı sürümünü ayarlamak için Birpython_version yürütülebilir Python kuralı (py_binary veya py_test).

İzin verilen değerler: "PY2AND3", "PY2" ve "PY3". Geçmiş için "PY2ONLY" ve "PY3ONLY" değerlerine de izin verilir ancak bunlar temelde "PY2" ve "PY3" ile aynıdır. ve kaçınılması gerekir.

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. (py_library, mevcut Python'u değiştirmediği için bu bir özelliktir. doğrulama yapılmış olsaydı hem PY2ONLY sürümü hem de ve PY3ONLY kitaplık aynı çağrıda.) Ayrıca, açıklamada sürüm uyuşmazlığı nedeniyle hata yalnızca yürütme aşamasında bildirilir. Özellikle, bazel build --nobuild çağrısında görünmez.)

Hangi bağımlılıkların sürüm gereksinimini sunduğu hakkında teşhis bilgisi 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, bilgi sağlayan -pyversioninfo.txt son ekine sahip bir dosya oluşturur hedefiniz için neden bir Python sürümü veya başka bir sürüm gerektiği hakkında. Bu yöntem şu anda belirtilen hedef, sürüm çakışması nedeniyle oluşturulamadı.

stamp

Tam sayı; varsayılan değer 0

Aşağıdakiler hariç py_binary() bağımsız değişkenleriyle ilgili bölüme bakın: damga bağımsız değişkeninin testler için varsayılan olarak 0 değerine ayarlanmasını sağlar.

py_runtime

Kural kaynağını görüntüle
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, bir platform çalışma zamanını veya derleme çalışma zamanı. Platform çalışma zamanı, bilinen bir cihazda sistem tarafından yüklenmiş çevirmene erişir ve yoluna işaret ederken, derleme içi çalışma zamanı, yorumlayıcı olarak görev yapan yürütülebilir bir hedefe işaret eder. İçinde “Yorumcu” veya aşağıdakileri içeren yürütülebilir herhangi bir ikili program veya sarmalayıcı komut dosyası anlamına gelir: standart ile aynı kuralları izleyerek komut satırında geçirilen bir Python komut dosyasını çalıştırmak CPython çevirmeni.

Platform çalışma zamanı doğası gereği hermetik değildir. Hedef platformda bir koşul gerektiriyor. size bir tercüman bulmanız gerekir. Derleme içi çalışma zamanı hermetik olabilir ya da olmayabilir, giriş yapılmış bir çevirmeni mi yoksa web sitesine erişen bir sarmalayıcı komut dosyasına mı size yardımcı olabilir.

Ö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"

Daha önce "Python saplama komut dosyası" olarak adlandırılan her Python yürütülebilir hedefine giriş noktası oluşturur.
coverage_tool

Etiket; varsayılan değer None

Bu, py_binary ürününden kod kapsamı bilgilerini toplamak için kullanılacak bir hedeftir ve py_test hedef.

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 dosyanın yolu python kapsam aracının giriş noktasını belirler. Hedef ve çalıştırma dosyaları, kapsam etkinleştirildiğinde çalıştırma dosyalarına eklenir.

Aracın giriş noktası, bir python yorumcusu (ör. .py veya .pyc dosyası) ekleyebilirsiniz. Komut satırı bağımsız değişkenlerini kabul etmelidir coverage.py olması gerekir. Ayrıca en azından run ve lcov alt komutları.

files

Etiket listesi; varsayılan değer []

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 eklenmelidir. 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 için çalışma zamanında bu özelliğin ayarlanmaması gerekir.
interpreter_path

String; varsayılan değer ""

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

String; 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".

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

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

"Shebang" ifade, önyükleme Python komut dosyasının önüne py_binary hedefleri yürütülürken kullanılır.

Bilgi için 8685 numaralı sorunu inceleyin çok önemli.

Windows için geçerli değildir.