Reglas
objeto_binario
Ver 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 consiste en una colección de archivos de origen .py
(posiblemente que pertenecen a otras reglas py_library
), un árbol de directorios de *.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 dentro de una java_test), el enfoque correcto es hacer que el otro objeto binario o la prueba dependan del py_binary
en su sección de datos. Luego, el otro objeto binario puede ubicar el objeto py_binary
relacionado 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 |
Un nombre único para esta orientación. Si no se especifica main , 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 debería ser main .
|
deps
|
deps en Atributos típicos definidos por la mayoría de las reglas de compilación.
Por lo general, son reglas py_library .
|
srcs
|
.py ) que se procesan para crear el destino.
Esto incluye todo el código que hayas registrado y los archivos de origen generados. En su lugar, los destinos de la biblioteca pertenecen a deps , mientras que otros archivos binarios necesarios para el tiempo de ejecución pertenecen a data .
|
imports
|
PYTHONPATH .
Sujeto a la sustitución "Make variable". Estos directorios de importación se agregarán para esta regla y todas las reglas que dependan 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 (las que comienzan con |
legacy_create_init
|
--incompatible_default_to_explicit_init_py . Si es falso, el usuario es responsable de crear (posiblemente vacío) archivos __init__.py y de agregarlos a los srcs de los destinos de Python según sea necesario.
|
main
|
srcs . Si no se especifica, se usa name en su lugar (consulta la sección anterior). Si name no coincide con ningún nombre de archivo en srcs , se debe especificar main .
|
python_version
|
deps en tránsito) 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 especifique este atributo, independientemente de la versión especificada en la línea de comandos o de otros destinos superiores que dependan de esta. Si deseas Advertencia de error: Este atributo establece la versión para la que Bazel compila el destino, pero debido a #4815, la secuencia de comandos de stub resultante aún puede invocar la versión de intérprete incorrecta en el entorno de ejecución. Consulta esta solución alternativa, que implica definir un destino |
srcs_version
|
srcs del destino es compatible con Python 2, Python 3 o ambos. Para configurar la versión del entorno de ejecución de Python, usa el atributo python_version de una regla ejecutable de Python (py_binary o py_test ).
Los valores permitidos son los siguientes: Ten en cuenta que solo las reglas ejecutables ( Para obtener información de diagnóstico sobre qué dependencias ingresan requisitos de versión, puedes ejecutar el aspecto de bazel build <your target> \ --aspects=@rules_python//python:defs.bzl%find_requirements \ --output_groups=pyversioninfo. Esto creará un archivo con el sufijo -pyversioninfo.txt que brinda información sobre los motivos por los que tu destino requiere una versión de Python o alguna otra. Ten en cuenta que funciona incluso si el destino determinado no se pudo compilar debido a un conflicto de versiones.
|
stamp
|
Los objetos binarios sellados no se vuelven a compilar, a menos que cambien sus dependencias. |
biblioteca_py
Ver 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 |
Un nombre único para esta orientación. |
deps
|
deps en Atributos típicos definidos por la mayoría de las reglas de compilación.
Por lo general, son reglas py_library .
|
srcs
|
.py ) que se procesan para crear el destino.
Esto incluye todo el código que hayas registrado y los archivos de origen generados.
|
imports
|
PYTHONPATH .
Sujeto a la sustitución "Make variable". Estos directorios de importación se agregarán para esta regla y todas las reglas que dependan 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 (las que comienzan con |
srcs_version
|
srcs del destino es compatible con Python 2, Python 3 o ambos. Para configurar la versión del entorno de ejecución de Python, usa el atributo python_version de una regla ejecutable de Python (py_binary o py_test ).
Los valores permitidos son los siguientes: Ten en cuenta que solo las reglas ejecutables ( Para obtener información de diagnóstico sobre qué dependencias ingresan requisitos de versión, puedes ejecutar el aspecto de bazel build <your target> \ --aspects=@rules_python//python:defs.bzl%find_requirements \ --output_groups=pyversioninfo. Esto creará un archivo con el sufijo -pyversioninfo.txt que brinda información sobre los motivos por los que tu destino requiere una versión de Python o alguna otra. Ten en cuenta que funciona incluso si el destino determinado no se pudo compilar debido a un conflicto de versiones.
|
prueba_py
Ver 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 |
Un nombre único para esta orientación. |
deps
|
deps en Atributos típicos definidos por la mayoría de las reglas de compilación.
Por lo general, son reglas py_library .
|
srcs
|
.py ) que se procesan para crear el destino.
Esto incluye todo el código que hayas registrado y los archivos de origen generados. En su lugar, los destinos de la biblioteca pertenecen a deps , mientras que otros archivos binarios necesarios para el tiempo de ejecución pertenecen a data .
|
imports
|
PYTHONPATH .
Sujeto a la sustitución "Make variable". Estos directorios de importación se agregarán para esta regla y todas las reglas que dependan 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 (las que comienzan con |
legacy_create_init
|
--incompatible_default_to_explicit_init_py . Si es falso, el usuario es responsable de crear (posiblemente vacío) archivos __init__.py y de agregarlos a los srcs de los destinos de Python según sea necesario.
|
main
|
srcs . Si no se especifica, se usa name en su lugar (consulta la sección anterior). Si name no coincide con ningún nombre de archivo en srcs , se debe especificar main .
|
python_version
|
deps en tránsito) 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 especifique este atributo, independientemente de la versión especificada en la línea de comandos o de otros destinos superiores que dependan de esta. Si deseas Advertencia de error: Este atributo establece la versión para la que Bazel compila el destino, pero debido a #4815, la secuencia de comandos de stub resultante aún puede invocar la versión de intérprete incorrecta en el entorno de ejecución. Consulta esta solución alternativa, que implica definir un destino |
srcs_version
|
srcs del destino es compatible con Python 2, Python 3 o ambos. Para configurar la versión del entorno de ejecución de Python, usa el atributo python_version de una regla ejecutable de Python (py_binary o py_test ).
Los valores permitidos son los siguientes: Ten en cuenta que solo las reglas ejecutables ( Para obtener información de diagnóstico sobre qué dependencias ingresan requisitos de versión, puedes ejecutar el aspecto de bazel build <your target> \ --aspects=@rules_python//python:defs.bzl%find_requirements \ --output_groups=pyversioninfo. Esto creará un archivo con el sufijo -pyversioninfo.txt que brinda información sobre los motivos por los que tu destino requiere una versión de Python o alguna otra. Ten en cuenta que funciona incluso si el destino determinado no se pudo compilar debido a un conflicto de versiones.
|
stamp
|
|
py_runtime
Ver 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 el 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. Un entorno de ejecución de la plataforma accede a un intérprete instalado por el sistema en una ruta conocida, mientras que un entorno de ejecución de compilación apunta a un objetivo ejecutable que actúa como intérprete. En ambos casos, un "intérprete" se refiere a cualquier secuencia de comandos ejecutable o wrapper que pueda ejecutar una secuencia de comandos de Python pasada en la línea de comandos y seguir las mismas convenciones que el intérprete de CPython estándar.
Un entorno de ejecución de plataforma es, por naturaleza, no hermético. Implica un requisito en la plataforma de destino para tener un intérprete ubicado en una ruta de acceso específica. Un entorno de ejecución en compilación puede ser hermético o no, según si apunta a un intérprete que se registró o a una secuencia de comandos 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 |
Un nombre único para esta orientación. |
bootstrap_template
|
|
coverage_tool
|
py_binary y py_test .
Si se establece, el destino debe producir un solo archivo o ser un objetivo ejecutable. La ruta al único archivo o el ejecutable si el objetivo es ejecutable determina el punto de entrada de la herramienta de cobertura de Python. El destino y sus runfiles se agregarán a los archivos de ejecución cuando se habilite la cobertura. El punto de entrada de la herramienta debe ser cargado por un intérprete de Python (p.ej., un archivo |
files
|
|
interpreter
|
|
interpreter_path
|
|
python_version
|
"PY2" y "PY3" .
La marca |
stub_shebang
|
py_binary .
Consulta el problema 8685 para obtener motivación. No se aplica a Windows. |