2012-06-14 15 views
22

Es ist eine ähnliche Frage zu How can I make setuptools install a package that's not on PyPI?, aber nicht dasselbe.Wie kann ich setuptools installieren ein Paket von einer anderen Quelle, die auch auf Pypi mit der gleichen Versionsnummer verfügbar ist?

Da ich die gegabelte Version eines Pakets verwenden möchte, ignorieren setuptools den Abhängigkeitslink (da er dieselbe Versionsnummer hat).

Gibt es eine Möglichkeit, den Link aus den Abhängigkeitsverknüpfungen zu erzwingen? Oder ist die einzige Möglichkeit, die Versionsnummer im gegabelten Repo zu ändern?

requires = [ 
    ... 
    'pyScss==1.1.3' 
    ... 

dependencies = [ 
    'https://github.com/nadavshatz/pyScss/zipball/master#egg=pyScss-1.1.3' 
] 

aktualisieren

Sonderbare, anscheinend funktioniert es, wenn dieses Paket in der gewünschten Liste die einzige ist, dass noch nicht installiert ist. Wenn noch ein Paket fehlt, wird es von pypi heruntergeladen.

+0

@IlyaBaryshev, tut mir leid, aber ich verwende nur die Problemumgehung, die ich im Update beschreibe. Installieren/aktualisieren Sie alle Pakete, dann deinstallieren Sie diese spezielle und dann ist es das einzige fehlende Paket - in diesem Fall wird es den Link von den Abhängigkeiten – roberkules

+1

Ich bin ein Paket erstellen, so ist es keine Option. Ich denke darüber nach, alle Abhängigkeiten innerhalb meines Pakets zu verkaufen, scheint eine einzige Option zu sein, wenn man das fehlerhafte setuptools-Verhalten berücksichtigt. –

+0

Könnte dies eine Lösung für Ihr Problem sein: http://StackOverflow.com/a/17442663/368102? – Heyl1

Antwort

9

Ich glaube, Sie nur dependency_links in dieser Frage, wie beschrieben verwenden:

from setuptools import setup 

setup(name = 'mypkg', 
    version = '0.0.1', 
    description = 'Foo', 
    author = 'bar', 
    author_email = '[email protected]', 
     install_requires = ['pyScss==1.1.3'], 
     dependency_links = [ 
     'https://github.com/nadavshatz/pyScss/zipball/master#egg=pyScss-1.1.3' 
     ] 
    ) 

Getestet mit python setup.py develop

Sie wollen wahrscheinlich das Ei benennen betonen sie eine Gabel ist http://www.python.org/dev/peps/pep-0386/

Außerhalb Mit setup.py können Sie dies lokal mit requirements.txt und pip erzwingen. Während dies Ihr Paket nicht von der Gabelung abhängig macht, können Sie es leicht als die Art der Installation dokumentieren.

$ cat requirements.txt 
https://github.com/nadavshatz/pyScss/zipball/master#egg=pyScss-1.1.3 
$ pip install -r requirements.txt 
+0

eigentlich das ist, was ich tue ... in der 'setup' Aufruf übergeben ich' install_requires = erfordert' und 'Abhängigkeit_links = Abhängigkeiten'. Das ist im Grunde der gleiche Code wie bei Ihnen. – roberkules

6

Ich landete in stackoverflow.com/a/17442663/368102 etwas zu tun, sehr ähnlich wie die Antwort auf.

Ich brauche ein requests-file Github-Paket, das Name-Konflikt mit einem anderen requests-file Paket in PyPi. Beide haben eine Version 1.0 und die PyPi-Version hat einige höhere Versionen.

Die Abhilfe in meinem ias_tools/setup.py sieht wie folgt aus:

setup(
    ... 
    install_requires=[ 
     'requests-file<=99.99', 
    ], 
    dependency_links=[ 
     'https://github.com/jvantuyl/requests-file/archive/b0a7b34af6e287e07a96bc7e89bac3bc855323ae.zip#egg=requests-file-99.99' 
    ] 
) 

In meinem Fall bin ich mit pip so verwende ich musste auch --process-dependency-links:

% pip install --process-dependency-links ./ias_tools 
You are using pip version 6.0.6, however version 6.1.1 is available. 
You should consider upgrading via the 'pip install --upgrade pip' command. 
Processing ./ias_tools 
    DEPRECATION: Dependency Links processing has been deprecated and will be removed in a future release. 
Collecting requests-file<=99.99 (from ias-tools==0.1) 
    Downloading https://github.com/jvantuyl/requests-file/archive/b0a7b34af6e287e07a96bc7e89bac3bc855323ae.zip 
Requirement already satisfied (use --upgrade to upgrade): requests>=1.1.0 in ./venv/lib/python2.7/site-packages (from requests-file<=99.99->ias-tools==0.1) 
Installing collected packages: ias-tools, requests-file 
    Running setup.py install for ias-tools 
    Running setup.py install for requests-file 
Successfully installed ias-tools-0.1 requests-file-1.0 

Ich bin nicht allzu besorgt über die Verfallsnachricht, wie a pull request was submitted to pip, um die Veraltetheit zu verwerfen (nach einem discussion about it).

+0

Mein Buildbefehl war 'pip install --upgrade -e.', und ich musste auch' --process-dependency-links' hinzufügen. Danke, dass Sie diese Information mit aufgenommen haben. –