Pip: Direct URL PEP 508-Unterstützung und Installation von Unterabhängigkeiten von Git

Erstellt am 3. Juli 2018  ·  3Kommentare  ·  Quelle: pypa/pip

  • Pip-Version: 10.0.1
  • Python-Version: 3.7.0
  • Betriebssystem: macOS

Ich habe den ganzen Tag damit verbracht, über die Installation von Unterabhängigkeiten von git zu lesen, und ich habe immer noch Probleme, die richtige Lösung zu finden.

Mein Anwendungsfall

Ich habe eine bestehende Python-Bibliothek (verfügbar auf PyPi) geforkt und einige Änderungen hinzugefügt, die wahrscheinlich nicht im Upstream zusammengeführt werden.
Einige meiner Projekte hängen vom Bibliothekszweig ab. Zuvor war es eine Anwendung, und ich habe Pipenv verwendet, um Anwendungsabhängigkeiten zu verwalten, bei denen ich leicht angeben konnte, dass ein bestimmter Branch/Commit von Git in Pipfile installiert werden soll. Meine Anwendung ist gewachsen und jetzt konvertiere ich sie in eine Bibliothek (sie wird nicht auf PyPi veröffentlicht). Ich muss das Problem der Unterabhängigkeiten von Git für die Bibliothek lösen.
Ich habe zumindest die folgenden Ausgaben gelesen: #3610, #4187, #2124, #5384 und viele andere und natürlich PEP. Als ich mit dem Lesen fertig war, war ich noch verwirrter als zu Beginn.

Nach dem, was ich mit der Implementierung von PEP-508 in Pip 10 verstanden habe, sollte ich Folgendes verwenden können:

setup(
    name='dmfigol',
...
    install_requires=[
        "requests",
        'smartsheet-python-sdk @ git+ssh://[email protected]/dmfigol/smartsheet-python-sdk@dev#egg=smartsheet-python-sdk-1.3.3',
    ],
)

Aber es funktioniert nicht:

-> % pip install git+https://<private-git>/dmfigol/my-test-project.git
Collecting git+https://<private-git>/dmfigol/my-test-project.git
  ...
Direct url requirement (like smartsheet-python-sdk@ git+ssh://[email protected]/dmfigol/smartsheet-python-sdk@dev#egg=smartsheet-python-sdk-1.3.3) are not allowed for dependencies

Meine Fragen:
1) Habe ich etwas falsch gemacht oder wird dies nicht unterstützt?
2) Wenn es nicht unterstützt wird, wird es unterstützt?
3) Verstehe ich richtig, dass ich eine ähnliche Syntax auch in pyproject.toml wenn ich von setup.py zu etwas deklarativer migrieren möchte?
4) Ist heute die einzige verfügbare Lösung, die die Abschnitte --process-dependency-links und dependency_links in setup.py ?
5) Was passiert, wenn der Upstream die Bibliothek auf PyPi auf 1.3.4 oder höher aktualisiert und ich weiterhin meine geforkte Version 1.3.3 verwenden möchte?

Dankeschön

UPD: derzeit funktionierende Lösung, bis #4187 implementiert ist, wenn Sie über diesen Thread stolpern:

setup(
    ...
    install_requires=[
        "smartsheet-python-sdk==10.1.3.3",
    ],
    dependency_links=[
        'https://github.com/dmfigol/smartsheet-python-sdk/archive/no-setuptools-scm.zip#egg=smartsheet-python-sdk-10.1.3.3'
    ],
...
auto-locked support

Hilfreichster Kommentar

Habe ich etwas falsch gemacht oder wird dies nicht unterstützt?

PEP 508-URL-Anforderungen als Abhängigkeiten werden nicht unterstützt.

Wenn es nicht unterstützt wird, wird es unterstützt?

Jawohl. Siehe unten.

Verstehe ich richtig, dass ich eine ähnliche Syntax auch in pyproject.toml verwenden kann, wenn ich von setup.py zu etwas deklarativer migrieren möchte?

pyproject.toml dient nur als Ort, um Build-Zeit-Abhängigkeiten anzugeben und die Konfiguration für Tools zu haben. Alles andere wird von den von Ihnen verwendeten Tools implementiert.

Ist heute die einzige verfügbare Lösung, die --process-dependency-links und den Abschnitt Dependency_links in setup.py verwendet?

Jawohl. Das ist die ganze Motivation hinter #4187.


Wir haben die Möglichkeit deaktiviert, die PEP 508-URL-Anforderungen in Abhängigkeiten zu verwenden, da wir nicht möchten, dass ein von PyPI installiertes Paket dazu führt, dass der Pip eine beliebige Web-URL erreicht. Grundsätzlich sollte pip install spam Pip nicht dazu bringen, etwas außer PyPI zu erreichen.

Die derzeit vorgeschlagene Lösung in #4187 besteht darin, die Blockierungsbedingung einfach so zu ändern, dass URL-Abhängigkeiten nur blockiert werden, wenn ein Paket tatsächlich direkt von PyPI installiert wird, sodass jeder andere Installationsmodus PEP 508-URL-Abhängigkeiten verwenden kann.

Alle 3 Kommentare

Habe ich etwas falsch gemacht oder wird dies nicht unterstützt?

PEP 508-URL-Anforderungen als Abhängigkeiten werden nicht unterstützt.

Wenn es nicht unterstützt wird, wird es unterstützt?

Jawohl. Siehe unten.

Verstehe ich richtig, dass ich eine ähnliche Syntax auch in pyproject.toml verwenden kann, wenn ich von setup.py zu etwas deklarativer migrieren möchte?

pyproject.toml dient nur als Ort, um Build-Zeit-Abhängigkeiten anzugeben und die Konfiguration für Tools zu haben. Alles andere wird von den von Ihnen verwendeten Tools implementiert.

Ist heute die einzige verfügbare Lösung, die --process-dependency-links und den Abschnitt Dependency_links in setup.py verwendet?

Jawohl. Das ist die ganze Motivation hinter #4187.


Wir haben die Möglichkeit deaktiviert, die PEP 508-URL-Anforderungen in Abhängigkeiten zu verwenden, da wir nicht möchten, dass ein von PyPI installiertes Paket dazu führt, dass der Pip eine beliebige Web-URL erreicht. Grundsätzlich sollte pip install spam Pip nicht dazu bringen, etwas außer PyPI zu erreichen.

Die derzeit vorgeschlagene Lösung in #4187 besteht darin, die Blockierungsbedingung einfach so zu ändern, dass URL-Abhängigkeiten nur blockiert werden, wenn ein Paket tatsächlich direkt von PyPI installiert wird, sodass jeder andere Installationsmodus PEP 508-URL-Abhängigkeiten verwenden kann.

Vielen Dank für die ausführliche Erklärung, ich bin sehr dankbar für Ihre Hilfe.

Dieser Thread wurde automatisch gesperrt, da nach dem Schließen in letzter Zeit keine Aktivität stattgefunden hat. Bitte öffnen Sie eine neue Ausgabe für verwandte Fehler.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen