2012-10-19 12 views
12

Ist es möglich, Quellabhängigkeiten in setup.py (editable) anzugeben, die auf dem lokalen Dateisystem bekannt sind?Wie kann ich setuptools installieren (oder verteilen) ein Paket aus dem lokalen Dateisystem

Betrachten Sie die folgende Verzeichnisstruktur, die alle in einem einzigen Repository VCS lebt:

projects 
    utils 
    setup.py 
    ... 
    app1 
    setup.py 
    ... # app1 files depend on ../utils 
    app2 
    setup.py 
    ... # app2 files depend on ../utils 

Angesichts der folgenden Befehle:

cd projects 
mkvirtualenv app1 
pip install -e app1 

Ich möchte alle Abhängigkeiten für app1 haben installiert, einschließlich "utils", was eine "bearbeitbare" Abhängigkeit ist. Genauso, wenn ich das gleiche für app2 gemacht habe.

Ich habe versucht, mit allen verschiedenen Kombinationen von file://... URLs in und dependency_links vergeblich zu spielen. Ich würde gerne eine Abhängigkeitslink-URL wie src+file://../utils verwenden, die setuptools mitteilen würde, dass sich die Quelle für das Paket auf diesem relativen Pfad im Dateisystem befindet. Gibt es eine Möglichkeit, dies zu tun?

+0

Dies könnte eine Hilfe sein: http://packages.python.org/distribute/setuptools.html#dependencies-that-aren-t-in-pypi –

+0

Danke, Rob. Ich habe diese Seite ausführlich besprochen, bevor ich die Frage hier gestellt habe. Die Seite listet zwei Kategorien von URLs auf: (1) direkte Download-URLs und (2) URLs von Webseiten, die direkte Download-Links enthalten. Ich hatte gehofft, dass mein Problem in die erste Kategorie fallen würde, aber ich kann nicht herausfinden, wie man die URL erstellt. – millerdev

+4

Ich habe eine [Patch zu Pip] (https://github.com/pypa/pip/pull/719) eingereicht, um relative 'file:' URLs in 'dependency_links' zu unterstützen, was mein Problem löst. Hoffentlich wird es bald zusammengeführt. – millerdev

Antwort

0

Wenn ich mit einer Reihe von miteinander verknüpften Projekten arbeiten möchte, installiere ich alle unter Verwendung von /setup.py develop.

Wenn ich irrtümlich oder später möchte ich ein Pip-installiertes Modul editierbar machen, klonen ich die Quelle, und tun Sie eine python setup.py develop darauf auch, ersetzen die bestehende.

Nur um sicher zu gehen, lösche ich die Referenz in den Site-Paketen von virtualenv und dem Paket selbst.

2

Ich hatte ein identisches Problem, wo ich auf Module in einem Geschwister-Ordner angewiesen war. Ich war in der Lage, eine Lösung zu finden, nachdem auf Stolper https://caremad.io/2013/07/setup-vs-requirement/

Ich landete requirements.txt speziell auf die Datei wollte verweise ich, und dann alles, was die Installation mit

pip install -r requirements.txt 

requirements.txt

-e ../utils                                          
-e . 

Und setup.py hat alle meine anderen Abhängigkeiten, einschließlich utils. Wenn pip versucht, app1 selbst zu installieren, stellt es fest, dass die utils-Abhängigkeit bereits gefüllt wurde, und übergibt es so, während die anderen Anforderungen installiert werden.

+0

Der relative Pfad in der requirements.txt funktioniert, falls Sie das Verzeichnis betreten und den Befehl ausgeführt haben ... das Ausführen desselben Befehls im übergeordneten Verzeichnis würde nicht funktionieren. Es gibt Probleme mit der relativen Pfadangabe für die pip requirements.txt-Datei https://github.com/pypa/pip/issues/3772 – infinityLoop