bazel-contrib / bazel-contrib/rules_python

Support importing across repos with bzlmod

Abierto
#2,088 16 comentarios 2 reacciones 0 asignados Ver en GitHub
type: bzlmod type: feature request
Lenguaje dominante
Starlark
Estrellas
688
Forks
721
Merge medio
15 h 7 min
PR fusionados (30 d)
76

Descripción

# 🚀 feature request

### Relevant Rules
`py_library` / `py_binary`

### Description

If there is a python library `@foo//bar:baz`, how can I import it from the main repository?

Pre-bzlmod, you could write `from foo.bar import baz`, as it would be in the directory `external/foo/bar/baz`, and the external directory was in your python path. Apparently this was not documented or intended, but nevertheless, people used it, as I don't believe it was ever considered when writing rules_python.

In bzlmod, however, you have repo mapping, where the directory `foo` is actually stored at `external/_main~~foo_ext~foo`, and thus `from foo.bar import baz` fails. This is the direct cause of #1679, and if we solve this, we fix that bug for free.

### Describe the solution you'd like
I'd personally like to make users prefix their imports to external repositories with the name of the workspace (based on the repo mapping). This would allow two python files in different repositories to `import foo.bar.baz` and each get their own `@foo` in the case of a repo name clash (this is how repo mapping is intended to be used, to allow each repo to have their own namespace of repos).

I previously achieved this in ChromeOS via a `sitecustomize.py` (see discussion in #1679).

### Describe alternatives you've considered

I can't really think of a viable alternative. Any solution without including the repo name in the import seems like it will end up in painful corner cases where you have name conflicts.

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comienza leyendo la discusión en #1679 y el enfoque de sitecustomize.py al que se hace referencia. Aclara cómo el mapeo de repositorios de bzlmod debería determinar los nombres de importación de Python entre repositorios, incluidos los conflictos de nombres. Se considera completado cuando exista una dirección de implementación acordada y documentada que admita las importaciones solicitadas entre repositorios y resuelva el fallo informado.

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.