2014-09-26 14 views
9

Ich verwende python version 2.7 und pip version is 1.5.6.Pip Installation Abhängigkeit Links

Ich möchte zusätzliche Bibliotheken von URL installieren, wie ein Git Repo auf setup.py installiert wird.

Ich legte Extras in Parameter in setup.py. Das bedeutet, meine Bibliothek benötigt zusätzliche Bibliotheken und sie müssen ebenfalls installiert werden.

... 
install_requires=[ 
    "Django", 
    .... 
], 
... 

Aber Urls wie git repos sind nicht gültige Zeichenfolge in install_requires in setup.py. Angenommen, ich möchte eine Bibliothek von Github installieren. Ich habe über dieses Problem gesucht und ich habe etwas gefunden, das ich Bibliotheken in dependency_links in setup.py setzen kann. Aber das funktioniert immer noch nicht. Hier ist meine Abhängigkeit Links Definition;

dependency_links=[ 
    "https://github.com/.../tarball/master/#egg=1.0.0", 
    "https://github.com/.../tarball/master#egg=0.9.3", 
], 

Die Links sind gültig. Ich kann sie mit diesen URLs von einem Internetbrowser herunterladen. Diese zusätzlichen Bibliotheken sind immer noch nicht mit meiner Einrichtung installiert. Ich versuchte auch --process-dependency-links Parameter, um Pip zu erzwingen. Aber das Ergebnis ist dasselbe. Ich nehme keinen Fehler beim Pippen.

Nach der Installation sehe ich keine Bibliothek in pip freeze Ergebnis in dependency_links. Wie kann ich sie mit meiner setup.py Installation herunterladen lassen?

Edited:

Hier ist meine komplette setup.py

from setuptools import setup 

try: 
    long_description = open('README.md').read() 
except IOError: 
    long_description = '' 

setup(
    name='esef-sso', 
    version='1.0.0.0', 
    description='', 
    url='https://github.com/egemsoft/esef-sso.git', 
    keywords=["django", "egemsoft", "sso", "esefsso"], 
    install_requires=[ 
     "Django", 
     "webservices", 
     "requests", 
     "esef-auth==1.0.0.0", 
     "django-simple-sso==0.9.3" 
    ], 
    dependency_links=[ 
     "https://github.com/egemsoft/esef-auth/tarball/master/#egg=1.0.0.0", 
     "https://github.com/egemsoft/django-simple-sso/tarball/master#egg=0.9.3", 
    ], 

    packages=[ 
     'esef_sso_client', 
     'esef_sso_client.models', 
     'esef_sso_server', 
     'esef_sso_server.models', 
    ], 
    include_package_data=True, 
    zip_safe=False, 
    platforms=['any'], 
) 

2 Herausgegeben:

Hier pip log ist;

Downloading/unpacking esef-auth==1.0.0.0 (from esef-sso==1.0.0.0) 
    Getting page https://pypi.python.org/simple/esef-auth/ 
    Could not fetch URL https://pypi.python.org/simple/esef-auth/: 404 Client Error: Not Found 
    Will skip URL https://pypi.python.org/simple/esef-auth/ when looking for download links for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0) 
    Getting page https://pypi.python.org/simple/ 
    URLs to search for versions for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0): 
    * https://pypi.python.org/simple/esef-auth/1.0.0.0 
    * https://pypi.python.org/simple/esef-auth/ 
    Getting page https://pypi.python.org/simple/esef-auth/1.0.0.0 
    Could not fetch URL https://pypi.python.org/simple/esef-auth/1.0.0.0: 404 Client Error: Not Found 
    Will skip URL https://pypi.python.org/simple/esef-auth/1.0.0.0 when looking for download links for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0) 
    Getting page https://pypi.python.org/simple/esef-auth/ 
    Could not fetch URL https://pypi.python.org/simple/esef-auth/: 404 Client Error: Not Found 
    Will skip URL https://pypi.python.org/simple/esef-auth/ when looking for download links for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0) 
    Could not find any downloads that satisfy the requirement esef-auth==1.0.0.0 (from esef-sso==1.0.0.0) 
Cleaning up... 
    Removing temporary dir /Users/ahmetdal/.virtualenvs/esef-sso-example/build... 
No distributions at all found for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0) 
Exception information: 
Traceback (most recent call last): 
    File "/Users/ahmetdal/.virtualenvs/esef-sso-example/lib/python2.7/site-packages/pip/basecommand.py", line 122, in main 
    status = self.run(options, args) 
    File "/Users/ahmetdal/.virtualenvs/esef-sso-example/lib/python2.7/site-packages/pip/commands/install.py", line 278, in run 
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle) 
    File "/Users/ahmetdal/.virtualenvs/esef-sso-example/lib/python2.7/site-packages/pip/req.py", line 1177, in prepare_files 
    url = finder.find_requirement(req_to_install, upgrade=self.upgrade) 
    File "/Users/ahmetdal/.virtualenvs/esef-sso-example/lib/python2.7/site-packages/pip/index.py", line 277, in find_requirement 
    raise DistributionNotFound('No distributions at all found for %s' % req) 
DistributionNotFound: No distributions at all found for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0) 

Es scheint, ist es nicht die Quellen in dependency_links nicht verwendet.

Antwort

7

Sie müssen sicherstellen, dass Sie die Abhängigkeit in Ihrem auch einschließen.

Hier ist ein Beispiel setup.py

#!/usr/bin/env python 
from setuptools import setup 

setup(
    name='foo', 
    version='0.0.1', 
    install_requires=[ 
     'balog==0.0.7' 
    ], 
    dependency_links=[ 
     'https://github.com/balanced/balog/tarball/master#egg=balog-0.0.7' 
    ] 
) 

Hier ist das Problem mit Ihrem Beispiel setup.py:

Sie verpassen das Ei Namen in den Abhängigkeitsverbindungen Sie Setup.

Sie haben

https://github.com/egemsoft/esef-auth/tarball/master/#egg=1.0.0.0

Sie benötigen

https://github.com/egemsoft/esef-auth/tarball/master/#egg=esef-auth-1.0.0.0

+1

Es heißt 'Konnte keine Downloads finden, die die Anforderung erfüllen my-extra-libraray == 1.0.0.0 (von my-installed-library-zZ == 1.0.0.0)' –

+0

@AhmetDAL Sie haben beide Abhängigkeitsverknüpfungen und installieren erfordert angegeben? Kannst du das komplette 'setup.py', das du benutzt, posten? – mjallday

+0

Bitte beachten Sie den bearbeiteten Teil meiner Frage. –

14

Pip Unterstützung entfernt wieder eine Weile, dependency_links.Die latest version of pip that supports dependency_links is 1.3.1, es Links

pip install pip==1.3.1 

Ihre Abhängigkeit installieren sollte an diesem Punkt arbeiten. Bitte beachten Sie, dass dependency_links immer der letzte Ausweg für pip waren, d. Wenn ein Paket mit dem gleichen Namen auf Pypi existiert, wird es über Ihrem ausgewählt.

Hinweis, https://github.com/pypa/pip/pull/1955 scheint zuzulassen, dass dependency_links, pip es beibehalten, aber Sie müssen möglicherweise einige Befehlszeilenoptionen verwenden, um eine neuere Version von pip verwenden.

BEARBEITEN: Ab pip 7 ... haben sie die Links neu geschrieben und sie aktiviert, obwohl sie die Verwarnungsbenachrichtigung nicht von den Diskussionen entfernt haben, die sie hier zu bleiben scheinen. Mit pip> = 7 ist hier, wie Sie die Dinge

pip install -e . --process-dependency-links --allow-all-external 

Oder fügen Sie Folgendes in einer pip.conf installieren können, z.B. /etc/pip.conf

[install] 
process-dependency-links = yes 
allow-all-external = yes 
trusted-host = 
    bitbucket.org 
    github.com 

EDIT

Ein Trick, den ich gelernt habe, die Versionsnummer zu etwas wirklich hoch, um sicherzustellen, bump up ist, dass Pip nicht die nicht die Abhängigkeitsverbindungs ​​Version nicht bevorzugen (wenn das etwas ist, Sie wollen). Aus dem obigen Beispiel die Abhängigkeit Link aussehen machen:

"https://github.com/egemsoft/django-simple-sso/tarball/master#egg=999.0.0", 

Auch stellen Sie sicher, dass die Version entweder sieht aus wie das Beispiel oder die aktuelle Version, wird eine andere Versions pip denkt, seine eine Entwickler-Version machen und es wird nicht installieren .

+0

Sieht so aus, als ob das nicht mehr der Fall ist? dependency_links wird im letzten Pip soweit unterstützt, wie ich sehen kann. – yelsayed

+0

Sie sehen immer noch die Warnung, aber Abhängigkeitsverknüpfungen bleiben für eine Weile bestehen. Sie müssen immer noch die Konfiguration, soweit ich weiß, finden Sie in der Notiz im Bearbeitungsbereich der Antwort. – Pykler

+0

vielleicht sollten Sie Informationen über Pip Version 1.3.1 entfernen es ist sehr alt –

1

Ich konfrontiert eine ähnliche Situation, wo ich formschön als eine meiner Paketabhängigkeit verwenden möchte. Formschön ist jedoch, dass Sie, wenn Sie Windows verwenden, die .whl-Datei von http://www.lfd.uci.edu/~gohlke/pythonlibs/ verwenden müssen. Andernfalls müssen Sie einen C-Compiler installieren, was ich nicht möchte. Ich möchte, dass der Benutzer einfach pip install mypackage verwendet, anstatt eine Menge anderer Materialien zu installieren.

Und wenn Sie den typischen Aufbau mit dependency_links

setup(
    name = 'streettraffic', 
    packages = find_packages(), # this must be the same as the name above 
    version = '0.1', 
    description = 'A random test lib', 
    author = 'Costa Huang', 
    author_email = '[email protected]', 
    install_requires=['Shapely==1.5.17'], 
    dependency_links = ['http://www.lfd.uci.edu/~gohlke/pythonlibs/ru4fxw3r/Shapely-1.5.17-cp36-cp36m-win_amd64.whl'] 
) 

und laufen python setup.py install haben, wird es einfach auf PyPI und verursachen Probleme bei der Windows-Installation gehen, um den wohlgeformten zu holen. Nach Stunden der Forschung, fand ich diesen Link Force setuptools to use dependency_links to install mysqlclient und im Grunde from setuptools.command.install import install as _install manuell zu installieren formschön.

from setuptools.command.install import install as _install 
from setuptools import setup, find_packages 
import pip 

class install(_install): 
    def run(self): 
    _install.do_egg_install(self) 

    # just go ahead and do it 
    pip.main(['install', 'http://localhost:81/Shapely-1.5.17-cp36-cp36m-win_amd64.whl']) 

setup(
    name = 'mypackage', 
    packages = find_packages(), # this must be the same as the name above 
    version = '0.1', 
    description = 'A random test lib', 
    author = 'Costa Huang', 
    author_email = '[email protected]', 
    cmdclass={'install': install} 
) 

Und das Skript funktioniert gut. Ich hoffe es hilft.

Verwandte Themen