2016-05-18 41 views
11

Napisałem pakiet z zależnością zależności od psutil (my-package w zależności od third-party-package, która zależy od psutil).
Ponieważ ma działać na serwerze bez połączenia i bez gcc, przygotowałem lokalnie lokację z psutili pip install my-package --download, a następnie wysłałem wszystko na serwer.Problemy podczas instalowania psutila (koła) jako zależności przez pip

Teraz wszystko jest gotowe na serwerze, ale z jakiegoś powodu, po uruchomieniu instalacji, pip odmawia instalacji psutil. Zauważ, że serwer to czerwony kapelusz 7.2 uruchomiony pip 7.1.0, virtualenv 1.10.1 i python 2.7.5 (i nie mogę zmienić wersji czegokolwiek).

$ pip install /tmp/python_packages/my-package-1.4.zip --no-index 
    --find-links /tmp/python_packages/ --use-wheel 
Ignoring indexes: https://pypi.python.org/simple/ 

# blablabla, everything goes fine, then 

Downloading/unpacking psutil (from third-party-package>=0.9->my-package==1.4) 
    Could not find any downloads that satisfy the requirement psutil 
    (from third-party-package>=0.9->my-package==1.4) 
Cleaning up... 
No distributions at all found for psutil (from third-party-package>=0.9->my-package==1.4) 
Storing complete log in /home/anto/.pip/pip.log 

Oto co pip.log mówi:

Downloading/unpacking psutil (from third-party-package>=0.9->my-package==1.4) 

    URLs to search for versions for psutil (from third-party-package>=0.9->my-package==1.4): 
    # bla 
    Skipping file:///tmp/python_packages/psutil-4.2.0-cp27-cp27mu-linux_x86_64.whl 
    because it is not compatible with this Python 
    # bla 
    Could not find any downloads that satisfy the requirement psutil (from third- 
    party-package>=0.9->my-package==1.4) 

Cleaning up... 

Więc "nie jest kompatybilny z tym Pythona", ok. Ale tutaj jest naprawdę dziwna część: jeśli zainstaluję psutil bez niczego, a potem resztę, wszystko pójdzie dobrze.

$ pip install /tmp/python_packages/psutil-4.2.0-cp27-cp27mu-linux_x86_64.whl 
Unpacking /tmp/python_packages/psutil-4.2.0-cp27-cp27mu-linux_x86_64.whl 
Installing collected packages: psutil 
Successfully installed psutil 
Cleaning up... 
$ pip freeze -l 
psutil==4.2.0 
$ pip install /tmp/python_packages/my-package-1.4.zip --no-index 
    --find-links /tmp/python_packages/ --use-wheel 

# blablabla 

Successfully installed my-package third-party-package 
Cleaning up... 

Czego mi brakuje? Jakaś wskazówka?

+0

jaki jest pakiet osób trzecich? – second

+0

To pakiet opracowany przez kogoś z mojej firmy. Plik setup.py zawiera 'install_requires = ['psutil']'; nic fajnego. – Anto

+0

Nie jesteś pewien, czy masz wiele wersji python, ale w pip.log sprawdź, czy w obu przypadkach używany python jest poprawną wersją? (http://stackoverflow.com/questions/29879504/python-version-incorrectly-identified) Nie jestem przekonany, że to twój problem, ale jest to początek. Inna uwaga, dlaczego wciąż jesteś na 2.7.5? najnowszy to 2.7.11. –

Odpowiedz

0

Wydaje się, że z twojej odpowiedzi korzystasz z dodatkowego kroku.

Podczas instalacji w trybie offline musisz powiedzieć mu, gdzie znaleźć wszystkie pakiety, które chcesz zainstalować jawnie, a nie tylko najwyższy poziom.

Osobiście zawsze mówiłem wyraźnie o tym, że patrzysz w pliku i jak każda inna instalacja pip, możesz określić wiele instalacji w tej samej linii dla kontekstu.

$ pip install --no-index --find-links file:/tmp/python_packages/ --use-wheel psutil my-package-1.4.zip 
+0

Nie sądzę, to jest powód, ponieważ pip znajduje koło; po prostu odmawia instalacji z powodu, który nie brzmi legalnie (wersja python);) – Anto

+0

Ma to więcej wspólnego z wersją pip/ven/setuptools niż wersja IMHO w Pythonie. @Anto: jaka jest wersja tych narzędzi, których używasz? I dla dobra tego którego dystrybucji/wersji Linux? –

+0

Jaki jest wynik działania pip --version? –

1

Kluczową sprawą stoją jest IMHO to:

Skipping file:///tmp/python_packages/psutil-4.2.0-cp27-cp27mu-linux_x86_64.whl 
because it is not compatible with this Python 

Nowy Najnowsze funkcja została wprowadzona w pip do wsparcia "wielu linux" koła (zobacz ten PEP)

When z prośbą o bezpośrednią instalację koła, minimalne kontrole są wykonywane i pip zakłada, że ​​naprawdę chcesz to zainstalować.

Gdy koło jest instalowane pośrednio jako dep dep w twoim przypadku, w tym kontekście mogą występować niezgodne znaczniki.

Zapewniam, że używam najnowszej wersji pip, setuptools i virtualenv do usuwania ruchomych części i może to rozwiązać problem.

Niejasne powiązanie, a jeśli to może pomóc, używam this script z opakowaniem Linux/Mac lub Windows, aby wykonać spójną instalację pakietów pip producenta. Kluczową kwestią jest sprzedawanie wszystkiego i może to być kolejny powód, dla którego wystąpiła awaria.

1

Upewnij się, że wersja koła użytego do utworzenia koła jest taka sama jak wersja użyta podczas wdrażania.

Doświadczyłem tego samego problemu podczas próby wdrożenia koła zbudowanego przy użyciu 0.29.0 za pomocą koła 0.24.0.

Zmieniono wersję koła używanego do budowy koła, aby pasowała do wersji używanej podczas wdrażania, a to rozwiązało problem.

+0

Sprawdzę to, wielkie dzięki. – Anto