2013-02-06 11 views
6

Piszę aplikację python, która zależy od innej, która jest hostowana w repozytorium github (nigdy w pypi) ze względów programistycznych.Uzyskaj pip do pracy z repozytorium git i github

Nazwijmy je:

  • App jest napisane: AppA
  • aplikacji w github: AppB

W App A, setup.py jest jak:

# 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' 
    ] 
) 

Teraz AppA jest budowane przez Jenkins CI z każdy pchania i otrzymuję awarię bo następnego zostanie zgłoszony błąd:

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

Zabawne jest to, że tak się dzieje tylko w Jenkins, działa doskonale na moim komputerze. Próbowałem obu adresów URL SSH, które daje github, a nie są one nawet brane pod uwagę do pobrania.

Teraz Appa jest zawarty w pliku wymaganiami projektu również budowanego przez Jenkinsa, więc instalacja zależności ręcznie poprzez pip install AppApip install AppB nie jest opcja, że ​​zależności są automatycznie instalowane są wliczone w requirements.txt.

Czy istnieje sposób, aby pips i git z adresami github działały razem?

Każda pomoc zostanie doceniona :)

Z góry dziękuję!

+0

Czy na pewno Jenkins wykorzystuje pip? Jeśli tak, czy jest to wersja obsługująca tę funkcję? – wRAR

+0

@Grzy, której wersji pip używa twoje pudełko Jenkinsa? 'pip --version' powinien dostarczyć ci tych informacji. Poza mankietem wygląda on na wersję przed wersją 0.8.2, która nie obsługuje schematu https. – jszakmeister

Odpowiedz

12

Problem nie dotyczy pip, jest z setuptools. Odpowiedzialnym za wywołanie setup() jest pakiet (setuptools lub distribute project).

Ani setuptools ani distribute zrozumieć tego rodzaju adresu URL, rozumieją pliki tarballs/zip.

Spróbuj wskazać adres URL pobierania Githuba - zwykle plik zip.

Wpis dependency_links prawdopodobnie będzie wyglądać następująco:

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

Aby uzyskać więcej informacji zajrzyj na http://peak.telecommunity.com/DevCenter/setuptools#dependencies-that-aren-t-in-pypi

+0

Oprócz tej odpowiedzi, w moim przypadku pakiet nigdy nie byłby zainstalowany, gdyby taki pakiet w 'require' był w formie' pakiet == wersja', ale działał przy użyciu 'pakietu'; to znaczy tylko nazwa pakietu bez wersji – Gerard

2

Od 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 

Spróbuj wymienić git+https z git+git.

+0

Niestety to nie działa. Działa lokalnie, ale nie w Jenkins :(Próbuję coś wymyślić. Dzięki i tak – Gerard

+0

'git + https' powinien być obsługiwany, pomimo dokumentacji.Przynajmniej według [źródła] (https://github.com/pypa/pip/blob/develop/pip/vcs/git.py#L17). To wszystko pojawiło się ponownie w puntach 0.8.2. – jszakmeister

+0

Po prostu mówię, co pokazuje błąd - 'nieznany typ adresu URL: git + https'. Musi to być stara wersja pip. –

Powiązane problemy