bazel-contrib / bazel-contrib/rules_python

Generate one Bazel repo per dependency

Offen
#2,370 10 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
need: repro
Vorherrschende Sprache
Starlark
Sterne
688
Forks
721
Ø Merge
15 Std. 7 Min.
Gemergte PRs (30 T.)
76

Beschreibung

# 🚀 feature request

### Relevant Rules

`pip.parse()` module extension

### Description

When the same pip package is (transitively) depended upon multiple times from different `requirements.txt` files, it is undefined which version will be chosen (both are added to the PYTHONPATH and the order of deps decides which one takes precedence).
This is especially problematic for transitive dependencies of module dependencies where one only has limited to no influence of which version is chosen. This is especially problematic for fundamental libraries like Protobuf which gets pulled in transitively in many `requirements.txt`.
The way this is handled in golang, is that every dependency is its own Bazel repo and as such takes part in version resolution. This makes sure that every package only exists once within a given Bazel workspace.

### Describe the solution you'd like

Generate one Bazel repo per pip dependency.

### Describe alternatives you've considered

For the transition period, `rules_python` could generate both, one repo for all of `requirements.txt` and one repo per dependency. This way, users can easily migrate from one approach to another. In a future major version, the old functionality could be removed.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne mit der Erweiterung des Moduls `pip.parse()` und verfolge, wie mehrere `requirements.txt`-Dateien zu Repositories und PYTHONPATH-Einträgen werden. Vergleiche das aktuelle Repository-Modell mit allen Abhängigkeiten mit dem angeforderten Modell pro Abhängigkeit, einschließlich des vorgeschlagenen Übergangszeitraums; abgeschlossen ist die Arbeit, wenn jede pip-Abhängigkeit ihr eigenes Bazel-Repository hat und die Versionsauswahl nicht mehr durch die Reihenfolge der Abhängigkeiten bestimmt wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
build-system, tooling
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
30/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.