Reglas
py_binary
Ver el código 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
de un conjunto de archivos de origen .py
(que posiblemente pertenezcan
a otras reglas py_library
), una *.runfiles
árbol de directorios, que contiene el código y los datos necesarios para
en tiempo de ejecución y una secuencia de comandos 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 quieres ejecutar un py_binary
desde otro objeto binario o
(por ejemplo, ejecutar un objeto binario de Python para configurar algún recurso simulado desde
dentro de una java_test), el enfoque correcto es hacer que el otro objeto binario o
la prueba dependen de py_binary
en su sección de datos. El otro
El objeto binario puede ubicar el py_binary
en relación con la fuente
.
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 destino. Si no se especifica main , debería ser igual al nombre
del archivo fuente 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 , entonces tu nombre debería ser main .
|
deps
|
Lista de etiquetas; el valor predeterminado es deps en
Atributos típicos definidos por la mayoría de las reglas de compilación.
Estas suelen ser
Reglas py_library .
|
srcs
|
Lista de etiquetas; obligatorio. La lista de archivos de origen (.py ) que se procesan para crear el destino.
Esto incluye todo el código subido y cualquier archivo fuente generado. Destinos de la biblioteca
pertenecen a deps , mientras que otros archivos binarios necesarios en el tiempo de ejecución pertenecen
data
|
imports
|
Lista de cadenas; el valor predeterminado es PYTHONPATH .
Sujeto a la sustitución "Make variable". Estos importan
directorios nuevos para esta regla y todas las reglas que dependen de ella (nota: no se aplica
reglas de las que depende esta regla. Cada directorio se agregará a
Rutas de acceso absolutas (que comienzan con |
legacy_create_init
|
Número entero; el valor predeterminado es --incompatible_default_to_explicit_init_py está en uso. Si es falso, el usuario no
responsable de crear archivos __init__.py (posiblemente vacíos) y agregarlos al
srcs de destinos de Python, según sea necesario.
|
main
|
Etiqueta; el valor predeterminado es srcs . Si no se especifica,
En su lugar, se usa name (consulta la sección anterior). Si name no
coincide con cualquier nombre de archivo en srcs , se debe especificar main .
|
python_version
|
String; 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 versión que sea especificada por este atributo, independientemente de la versión especificada en la línea de comandos o por o a otros objetivos superiores que dependen de este. Si deseas ejecutar Advertencia de error: Este atributo establece la versión para la que Bazel compila tu destino.
pero, debido a #4815, el
La secuencia de comandos stub resultante puede invocar la versión incorrecta del intérprete en el entorno de ejecución. Consulta
este
solución alternativa, que implica definir un destino |
srcs_version
|
String; el valor predeterminado es srcs del destino es compatible con Python.
2, Python 3 o ambos. Para configurar realmente la versión del entorno de ejecución de Python, usa el
Atributo python_version de un
ejecutable de Python (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 las dependencias que 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
por qué tu objetivo requiere una versión de Python u otra. Ten en cuenta que funciona incluso si
no se pudo compilar el destino dado debido a un conflicto de versiones.
|
stamp
|
Número entero; el valor predeterminado es
Los objetos binarios sellados no se vuelven a compilar, a menos que cambien sus dependencias. |
py_library
Ver el código fuente de la reglapy_library(name, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
Argumentos
Atributos | |
---|---|
name |
Nombre: obligatorio. Un nombre único para este destino. |
py_test
Ver el código 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
en torno a algún 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 destino. |
deps
|
Lista de etiquetas; el valor predeterminado es deps en
Atributos típicos definidos por la mayoría de las reglas de compilación.
Estas suelen ser
Reglas py_library .
|
srcs
|
Lista de etiquetas; obligatorio. La lista de archivos de origen (.py ) que se procesan para crear el destino.
Esto incluye todo el código subido y cualquier archivo fuente generado. Destinos de la biblioteca
pertenecen a deps , mientras que otros archivos binarios necesarios en el tiempo de ejecución pertenecen
data
|
imports
|
Lista de cadenas; el valor predeterminado es PYTHONPATH .
Sujeto a la sustitución "Make variable". Estos importan
directorios nuevos para esta regla y todas las reglas que dependen de ella (nota: no se aplica
reglas de las que depende esta regla. Cada directorio se agregará a
Rutas de acceso absolutas (que comienzan con |
legacy_create_init
|
Número entero; el valor predeterminado es --incompatible_default_to_explicit_init_py está en uso. Si es falso, el usuario no
responsable de crear archivos __init__.py (posiblemente vacíos) y agregarlos al
srcs de destinos de Python, según sea necesario.
|
main
|
Etiqueta; el valor predeterminado es srcs . Si no se especifica,
En su lugar, se usa name (consulta la sección anterior). Si name no
coincide con cualquier nombre de archivo en srcs , se debe especificar main .
|
python_version
|
String; 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 versión que sea especificada por este atributo, independientemente de la versión especificada en la línea de comandos o por o a otros objetivos superiores que dependen de este. Si deseas ejecutar Advertencia de error: Este atributo establece la versión para la que Bazel compila tu destino.
pero, debido a #4815, el
La secuencia de comandos stub resultante puede invocar la versión incorrecta del intérprete en el entorno de ejecución. Consulta
este
solución alternativa, que implica definir un destino |
srcs_version
|
String; el valor predeterminado es srcs del destino es compatible con Python.
2, Python 3 o ambos. Para configurar realmente la versión del entorno de ejecución de Python, usa el
Atributo python_version de un
ejecutable de Python (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 las dependencias que 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
por qué tu objetivo requiere una versión de Python u otra. Ten en cuenta que funciona incluso si
no se pudo compilar el destino dado debido a un conflicto de versiones.
|
stamp
|
Número entero; el valor predeterminado es |
py_runtime
Ver el código 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 un código de Python.
Un destino py_runtime
puede representar un entorno de ejecución de la plataforma o un
entorno de ejecución en la compilación. El entorno de ejecución de la plataforma accede a un intérprete instalado por el sistema en un entorno
mientras que un entorno de ejecución integrado apunta a un destino ejecutable que actúa como intérprete. En
en ambos casos, un "intérprete" 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 la
Intérprete de CPython.
Por naturaleza, el entorno de ejecución de una plataforma no es hermético. Impone un requisito en la plataforma de destino. tener un intérprete en una ruta específica. Un entorno de ejecución integrado puede o no ser hermético, según si apunta a un intérprete registrado o a una secuencia de comandos wrapper que acceda a la de 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 destino. |
bootstrap_template
|
Etiqueta; el valor predeterminado es |
coverage_tool
|
Etiqueta; el valor predeterminado es py_binary
y py_test .
Si se configura, el destino debe producir un solo archivo o ser un destino ejecutable. La ruta de acceso al archivo único, o al ejecutable si el destino es ejecutable Determina el punto de entrada para la herramienta de cobertura de Python. El objetivo y su Los runfiles se agregarán a los runfiles cuando la cobertura esté habilitada. El punto de entrada de la herramienta se debe poder cargar con un intérprete de Python (p.ej., un
|
files
|
Lista de etiquetas; el valor predeterminado es |
interpreter
|
Etiqueta; el valor predeterminado es |
interpreter_path
|
String; el valor predeterminado es |
python_version
|
String; el valor predeterminado es "PY2"
y "PY3" .
La marca |
stub_shebang
|
String; el valor predeterminado es py_binary .
Consulta el problema 8685 para motivación. No se aplica a Windows. |