2013-02-06 9 views
6

Ich schreibe eine Python-App, die von einem anderen abhängt, die in einem Github-Repository gehostet wird (nie in Pypi) aus Entwicklungsgründen.Get Pip zum Arbeiten mit Git und GitHub-Repository

Läßt sich nennen:

  • App geschrieben: AppA
  • App in Github: AppB

In App A, die setup.py ist wie:

# coding=utf-8 
import sys 
try: 
    from setuptools import setup, find_packages 
except ImportError: 
    import distribute_setup 
    distribute_setup.use_setuptools() 
    from setuptools import setup, find_packages 

setup(
    ... 
    install_requires=[ 
     # other requirements that install correctly 
     'app_b==0.1.1' 
    ], 
    dependency_links=[ 
     'git+https://github.com/user/[email protected]#egg=app_b-0.1.1' 
    ] 
) 

Jetzt wird AppA von Jenkins CI mit gebaut jeder Push und ich erhalte einen Fehler, weil der nächste Fehler ausgelöst:

error: Download error for git+https://github.com/user/[email protected]: unknown url type: git+https 

Das lustige daran ist, dass dies geschieht nur in Jenkins, es funktioniert perfekt auf meinem Computer. Ich habe beide anderen SSH-URLs ausprobiert, die github gibt, und diese werden nicht einmal zum Herunterladen in Betracht gezogen.

Nun AppA in der Anforderungsdatei eines Projektes enthalten ist auch von Jenkins gebaut, so die Abhängigkeiten der Installation manuell über pip install AppApip install AppB ist keine Option, werden die Abhängigkeiten automatisch installiert werden, indem in den requirements.txt enthalten ist.

Gibt es eine Möglichkeit, Pip und Git mit github URLs zusammenarbeiten zu lassen?

werden Jede Hilfe sehr geschätzt :)

Vielen Dank im Voraus!

+0

Sind Sie sicher, dass Jenkins pip verwendet? Wenn ja, ist es eine Version, die diese Funktion unterstützt? – wRAR

+0

@Gerard Welche Version von Pip verwendet Ihre Jenkins-Box? 'pip --version' sollte Ihnen diese Informationen geben. Aus dem Stand heraus sieht es aus wie pre-0.8.2, das das https-Schema nicht unterstützt. – jszakmeister

Antwort

12

Das Problem ist nicht mit pip, ist mit setuptools. Der für den setup() Aufruf verantwortliche ist setuptools Paket (setuptools oder Projekt verteilen).

Weder setuptools noch distribute verstehen diese Art von URL, verstehen sie Tarballs/Zip-Dateien.

Versuchen Sie, auf Githubs Download-URL zu zeigen - normalerweise eine Zip-Datei.

Ihr dependency_links Eintrag wird wahrscheinlich wie folgt aussehen:

dependency_links=[ 
    'https://github.com/user/app_b/archive/0.1.1.zip#egg=app_b-0.1.1' 
] 

Weitere Informationen zu http://peak.telecommunity.com/DevCenter/setuptools#dependencies-that-aren-t-in-pypi einen Blick

+0

Zusätzlich zu dieser Antwort konnte das Paket in meinem Fall niemals installiert werden, wenn ein solches Paket in 'requires' in der Form' package == version' war, aber es funktionierte mit 'package'; das ist nur der Paketname ohne Version – Gerard

2

Von pip documentation -

pip currently supports cloning over git, git+http and git+ssh: 

git+git://git.myproject.org/MyProject#egg=MyProject 
git+http://git.myproject.org/MyProject#egg=MyProject 
git+ssh://git.myproject.org/MyProject#egg=MyProject 

Versuchen git+https mit git+git ersetzen.

+0

Entschuldigung, das hat nicht funktioniert. Es funktioniert lokal, aber nicht innerhalb Jenkins :(Ich versuche etwas herauszufinden. Danke trotzdem – Gerard

+0

'git + https' sollte trotz der Dokumentation unterstützt werden.Zumindest nach [Quelle] (https://github.com/pypa/pip/blob/develop/pip/vcs/git.py#L17). Das erschien den ganzen Weg zurück in Pip 0.8.2. – jszakmeister

+0

Ich sage nur, was der Fehler zeigt - 'unbekannter URL-Typ: git + https'. Muss eine alte Version von pip sein. –