bazel-contrib / bazel-contrib/rules_python

[proposal] requires_python attribute

Abierto
#2,444 1 comentario 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Starlark
Estrellas
688
Forks
721
Merge medio
15 h 7 min
PR fusionados (30 d)
76

Descripción

While having a global Python interpreter choice works fine for small repositories, in large repositories there are potentially considerable code compatibility concerns across interpreter/virtualenv versions and migrations of language versions require supporting split states where some targets have converted and others may not have converted.

Today it's possible to set up multiple Python toolchains and multiple virtualenvs and use build configuration to choose how a given target or group are built/tested and that works fine.

A problem we've encountered is that users who wish to _drop backwards compatibility_ have a hard time doing so in a sound way. Consider a service which has been able to adopt a new interpreter and would like to adopt new language features such as `:=` or `match`. Code which has adopted a syntax extension feature like this is no longer backwards compatible to earlier interpreters which can cause problems both in linting and if there are targets configured for older interpreters which depend on targets that have adopted these features.

The idea I've been kicking around is to extend `PyInfo` with a `requires_python` attribute expressing the interpreter constraint range same as in `setuptools`. It should also be possible for at a minimum the `py_binary` rule implementation to perform a consistency check over all the `PyInfo.requires_python` values and ensure that the rule as defined contains only compatible sources. It would also be desirable to be able to restrict eg. `rules_lint` behavior so that 3.8 linting would be applied only to 3.8 compatible sources; the alternative being choking on 3.11 features.

Thoughts?

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Empieza revisando la propuesta de un atributo PyInfo.requires_python y cómo py_binary valida actualmente sus fuentes. Considera cómo se relacionaría el rango de restricciones con setuptools y si rules_lint podría limitar el linting a las fuentes compatibles. Para darlo por terminado sería necesario contar con un diseño acordado y un comportamiento claro para la comprobación de consistencia, algo que el issue todavía no especifica.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python
Área
build-system
Tipo de issue
Nueva funcionalidad
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.