bazel-contrib / bazel-contrib/rules_python

Support importing across repos with bzlmod

Ouverte
#2,088 16 commentaires 2 réactions 0 personnes assignées Voir sur GitHub
type: bzlmod type: feature request
Langage dominant
Starlark
Étoiles
688
Forks
721
Merge moyen
15 h 7 min
PR mergées (30 j)
76

Description

# 🚀 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.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par lire la discussion dans #1679 et l’approche sitecustomize.py qui y est référencée. Clarifiez comment le mappage des dépôts bzlmod devrait déterminer les noms d’importation Python entre les dépôts, y compris les conflits de noms. Le travail est considéré comme terminé lorsqu’une orientation d’implémentation convenue et documentée prend en charge les importations inter-dépôts demandées et résout l’échec signalé.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
build-system
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.