Reglas
py_binary
Ver la fuente de la reglapy_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)
Un py_binary
es un programa ejecutable de Python que consta de una colección de archivos de origen .py
(posiblemente pertenecientes a otras reglas py_library
), un árbol de directorios *.runfiles
que contiene todo el código y los datos que necesita el programa en el tiempo de ejecución, y una secuencia de comandos de stub que inicia el programa con el entorno y los datos iniciales correctos.
Ejemplos
py_binary( name = "foo", srcs = ["foo.py"], data = [":transform"], # a cc_binary which we invoke at run time deps = [ ":foolib", # a py_library ], )
Si deseas ejecutar un py_binary
desde otro objeto binario o prueba (por ejemplo, ejecutar un objeto binario de Python para configurar algún recurso simulado desde un java_test), el enfoque correcto es hacer que el otro objeto binario o prueba dependa de py_binary
en su sección de datos. Luego, el otro objeto binario puede ubicar el py_binary
en relación con el directorio de origen.
py_binary( name = "test_main", srcs = ["test_main.py"], deps = [":testing"], ) java_library( name = "testing", srcs = glob(["*.java"]), data = [":test_main"] )
Argumentos
Atributos | |
---|---|
name |
Nombre: Obligatorio Un nombre único para este objetivo. Si no se especifica main , este debe ser el mismo que el nombre del archivo de origen que es el punto de entrada principal de la aplicación, menos la extensión. Por ejemplo, si tu punto de entrada se llama main.py , tu nombre debe ser main .
|
deps
|
Es una lista de etiquetas. El valor predeterminado es deps en
Atributos típicos definidos por la mayoría de las reglas de compilación.
Por lo general, son reglas py_library .
|
srcs
|
Es una lista de etiquetas obligatoria. Es la lista de archivos de origen (.py ) que se procesan para crear el destino.
Esto incluye todo el código que hayas confirmado y los archivos fuente generados. Los destinos de bibliotecas pertenecen a deps , mientras que otros archivos binarios necesarios en el tiempo de ejecución pertenecen a data .
|
imports
|
Es una lista de cadenas. El valor predeterminado es PYTHONPATH .
Sujeto a la sustitución de "Make variable". Estos directorios de importación se agregarán para esta regla y todas las reglas que dependen de ella (nota: no las reglas de las que depende esta regla). Cada directorio se agregará a
No se permiten las rutas de acceso absolutas (que comienzan con |
legacy_create_init
|
Número entero (el valor predeterminado es --incompatible_default_to_explicit_init_py . Si es falso, el usuario es responsable de crear archivos __init__.py (posiblemente vacíos) y agregarlos al srcs de los destinos de Python según sea necesario.
|
main
|
Etiqueta (Label); el valor predeterminado es srcs . Si no se especifica, se usa name en su lugar (consulta más arriba). Si name no coincide con ningún nombre de archivo en srcs , se debe especificar main .
|
python_version
|
Cadena; no configurable; el valor predeterminado es deps transitivo) para Python 2 o Python 3. Los valores válidos son "PY2" y "PY3" (el valor predeterminado).
La versión de Python siempre se restablece (posiblemente de forma predeterminada) a la que especifica este atributo, independientemente de la versión especificada en la línea de comandos o por otros destinos superiores que dependen de esta. Si quieres usar Advertencia de errores: Este atributo establece la versión para la que Bazel compila tu destino, pero debido al error #4815, la secuencia de comandos de stub resultante aún puede invocar la versión incorrecta del intérprete durante el tiempo de ejecución. Consulta esta solución, que implica definir un objetivo |
srcs_version
|
Cadena; el valor predeterminado es srcs del destino es compatible con Python 2, Python 3 o ambos. Para establecer la versión del entorno de ejecución de Python, usa el atributo python_version de una regla de Python ejecutable (py_binary o py_test ).
Los valores permitidos son Ten en cuenta que solo las reglas ejecutables ( Para obtener información de diagnóstico sobre qué dependencias introducen requisitos de versión,
puedes ejecutar el aspecto bazel build <your target> \ --aspects=@rules_python//python:defs.bzl%find_requirements \ --output_groups=pyversioninfo -pyversioninfo.txt que proporcionará información
sobre por qué tu destino requiere una versión de Python o otra. Ten en cuenta que funciona incluso si
no se pudo compilar el destino determinado debido a un conflicto de versiones.
|
stamp
|
Número entero (el valor predeterminado es
Los objetos binarios estampados no se vuelven a compilar, a menos que cambien sus dependencias. |
py_library
Ver la fuente de la reglapy_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)
Argumentos
Atributos | |
---|---|
name |
Nombre: Obligatorio Un nombre único para este objetivo. |
deps
|
Es una lista de etiquetas. El valor predeterminado es deps en
Atributos típicos definidos por la mayoría de las reglas de compilación.
Por lo general, son reglas py_library .
|
srcs
|
Es una lista de etiquetas. El valor predeterminado es .py ) que se procesan para crear el destino.
Esto incluye todo el código que hayas confirmado y los archivos fuente generados.
|
imports
|
Es una lista de cadenas. El valor predeterminado es PYTHONPATH .
Sujeto a la sustitución de "Make variable". Estos directorios de importación se agregarán para esta regla y todas las reglas que dependen de ella (nota: no las reglas de las que depende esta regla). Cada directorio se agregará a
No se permiten las rutas de acceso absolutas (que comienzan con |
srcs_version
|
Cadena; el valor predeterminado es srcs del destino es compatible con Python 2, Python 3 o ambos. Para establecer la versión del entorno de ejecución de Python, usa el atributo python_version de una regla de Python ejecutable (py_binary o py_test ).
Los valores permitidos son Ten en cuenta que solo las reglas ejecutables ( Para obtener información de diagnóstico sobre qué dependencias introducen requisitos de versión,
puedes ejecutar el aspecto bazel build <your target> \ --aspects=@rules_python//python:defs.bzl%find_requirements \ --output_groups=pyversioninfo -pyversioninfo.txt que proporcionará información
sobre por qué tu destino requiere una versión de Python o otra. Ten en cuenta que funciona incluso si
no se pudo compilar el destino determinado debido a un conflicto de versiones.
|
py_test
Ver la fuente de la reglapy_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)
Una regla py_test()
compila una prueba. Una prueba es un wrapper binario alrededor de un código de prueba.
Ejemplos
py_test( name = "runtest_test", srcs = ["runtest_test.py"], deps = [ "//path/to/a/py/library", ], )
También es posible especificar un módulo principal:
py_test( name = "runtest_test", srcs = [ "runtest_main.py", "runtest_lib.py", ], main = "runtest_main.py", )
Argumentos
Atributos | |
---|---|
name |
Nombre: Obligatorio Un nombre único para este objetivo. |
deps
|
Es una lista de etiquetas. El valor predeterminado es deps en
Atributos típicos definidos por la mayoría de las reglas de compilación.
Por lo general, son reglas py_library .
|
srcs
|
Es una lista de etiquetas obligatoria. Es la lista de archivos de origen (.py ) que se procesan para crear el destino.
Esto incluye todo el código que hayas confirmado y los archivos fuente generados. Los destinos de bibliotecas pertenecen a deps , mientras que otros archivos binarios necesarios en el tiempo de ejecución pertenecen a data .
|
imports
|
Es una lista de cadenas. El valor predeterminado es PYTHONPATH .
Sujeto a la sustitución de "Make variable". Estos directorios de importación se agregarán para esta regla y todas las reglas que dependen de ella (nota: no las reglas de las que depende esta regla). Cada directorio se agregará a
No se permiten las rutas de acceso absolutas (que comienzan con |
legacy_create_init
|
Número entero (el valor predeterminado es --incompatible_default_to_explicit_init_py . Si es falso, el usuario es responsable de crear archivos __init__.py (posiblemente vacíos) y agregarlos al srcs de los destinos de Python según sea necesario.
|
main
|
Etiqueta (Label); el valor predeterminado es srcs . Si no se especifica, se usa name en su lugar (consulta más arriba). Si name no coincide con ningún nombre de archivo en srcs , se debe especificar main .
|
python_version
|
Cadena; no configurable; el valor predeterminado es deps transitivo) para Python 2 o Python 3. Los valores válidos son "PY2" y "PY3" (el valor predeterminado).
La versión de Python siempre se restablece (posiblemente de forma predeterminada) a la que especifica este atributo, independientemente de la versión especificada en la línea de comandos o por otros destinos superiores que dependen de esta. Si quieres usar Advertencia de errores: Este atributo establece la versión para la que Bazel compila tu destino, pero debido al error #4815, la secuencia de comandos de stub resultante aún puede invocar la versión incorrecta del intérprete durante el tiempo de ejecución. Consulta esta solución, que implica definir un objetivo |
srcs_version
|
Cadena; el valor predeterminado es srcs del destino es compatible con Python 2, Python 3 o ambos. Para establecer la versión del entorno de ejecución de Python, usa el atributo python_version de una regla de Python ejecutable (py_binary o py_test ).
Los valores permitidos son Ten en cuenta que solo las reglas ejecutables ( Para obtener información de diagnóstico sobre qué dependencias introducen requisitos de versión,
puedes ejecutar el aspecto bazel build <your target> \ --aspects=@rules_python//python:defs.bzl%find_requirements \ --output_groups=pyversioninfo -pyversioninfo.txt que proporcionará información
sobre por qué tu destino requiere una versión de Python o otra. Ten en cuenta que funciona incluso si
no se pudo compilar el destino determinado debido a un conflicto de versiones.
|
stamp
|
Número entero (el valor predeterminado es |
py_runtime
Ver la fuente de la reglapy_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)
Representa un entorno de ejecución de Python que se usa para ejecutar código de Python.
Un destino py_runtime
puede representar un entorno de ejecución de la plataforma o un entorno de ejecución integrado en la compilación. Un entorno de ejecución de plataforma accede a un intérprete instalado por el sistema en una ruta conocida, mientras que un entorno de ejecución integrado apunta a un destino ejecutable que actúa como intérprete. En ambos casos, un “intérprete” se refiere a cualquier secuencia de comandos binaria o wrapper ejecutable que sea capaz de ejecutar una secuencia de comandos de Python pasada en la línea de comandos, siguiendo las mismas convenciones que el intérprete estándar de CPython.
Por su naturaleza, un entorno de ejecución de plataforma no es hermético. Impone un requisito a la plataforma de destino para que tenga un intérprete ubicado en una ruta específica. Un entorno de ejecución integrado puede ser hermético o no, según si apunta a un intérprete registrado o a una secuencia de comandos de wrapper que accede al intérprete del sistema.
Ejemplo:
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", )
Argumentos
Atributos | |
---|---|
name |
Nombre: Obligatorio Un nombre único para este objetivo. |
bootstrap_template
|
Etiqueta (Label); el valor predeterminado es |
coverage_tool
|
Etiqueta (Label); el valor predeterminado es py_binary y py_test .
Si se establece, el destino debe producir un solo archivo o ser un destino ejecutable. La ruta de acceso al archivo único, o el ejecutable si el destino es ejecutable, determina el punto de entrada de la herramienta de cobertura de Python. El objetivo y sus archivos de ejecución se agregarán a los archivos de ejecución cuando se habilite la cobertura. Un intérprete de Python debe poder cargar el punto de entrada de la herramienta (p.ej., un archivo |
files
|
Es una lista de etiquetas. El valor predeterminado es |
interpreter
|
Etiqueta (Label); el valor predeterminado es |
interpreter_path
|
Cadena; el valor predeterminado es |
python_version
|
Cadena; el valor predeterminado es "PY2" y "PY3" .
El valor predeterminado está controlado por la marca |
stub_shebang
|
Cadena; el valor predeterminado es py_binary .
Consulta el problema 8685 para obtener más información. No se aplica a Windows. |