2011-01-25 13 views
24

Ho pacchetto "A" con un setup.py e una linea extras_requires come:Il pip gestisce i extra di extras da setuptools/distribuisce fonti basate?

extras_require = { 
    'ssh': ['paramiko'], 
}, 

E un pacchetto "B" che dipende da util:

install_requires = ['A[ssh]'] 

Se eseguo python setup.py install sulla confezione B, che utilizza setuptools.command.easy_install sotto il cofano, il extras_requires è stato risolto correttamente e il parametro è installato.

Tuttavia, se eseguo pip /path/to/B o pip hxxp://.../b-version.tar.gz, il pacchetto A è installato, ma il parametro non lo è.

Poiché pip "installa dalla sorgente", non sono del tutto sicuro del perché non funzioni. Dovrebbe essere invocando setup.py di B, quindi risolvere & installando le dipendenze sia di B che di A.

E 'possibile con pip?

+1

Aggiornare il pip 'PIP installare -U pip' e poi' PIP installare"[ test] "deve installare la sezione denominata' extra_require' –

risposta

12

Questo è supportato da pip 1.1, che è stato rilasciato nel febbraio 2012 (un anno dopo questa domanda è stata posta).

+0

che sembra essere quella. La mia grep sull'albero dei sorgenti di pip non l'ha alzato, dato che stavo cercando la stringa "extras_require", non solo "extra". – dsully

+5

Per i posteri, usare 'pip install packagename [extra1, extra2] == 2.1' come descritto nell'esempio 6 [qui] (https://pip.pypa.io/en/latest/reference/pip_install.html#examples) e in [questo post] (http://stackoverflow.com/a/26285009/1959808). –

19

Usiamo setup.py e pip per gestire le dipendenze di sviluppo per i nostri pacchetti, anche se è necessaria una versione più recente di pip (stiamo usando 1.4.1 attualmente).

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

required = [ 
    'gevent', 
    'flask', 
    ... 
] 

extras = { 
    'develop': [ 
     'Fabric', 
     'nose', 
    ] 
} 

setup(
    name="my-project", 
    version=__version__, 
    description="My awsome project.", 
    packages=[ 
     "my_project" 
    ], 
    include_package_data=True, 
    zip_safe=False, 
    scripts=[ 
     'runmyproject', 
    ], 
    install_requires=required, 
    extras_require=extras, 
) 

per installare il pacchetto:

$ pip install -e . # only installs "required" 

Sviluppare:.

$ pip install -e .[develop] # installs develop dependencies 
+6

Sembra che 'pip install. [Develop]' (senza '-e') non funzioni, ed è necessario utilizzare un'installazione modificabile se si desidera installare extra di' .'. –

+0

Quando si utilizza 'pip install -e. [Develop]', pip installa gevent e Fabric? E dove è documentato questo comportamento? – laike9m

+0

Questo comando installerà tutto, 'gevent',' flask', 'Fabric' e' nose'. Pip utilizza internamente 'setuptools' per il loro sistema di compilazione https://pip.pypa.io/en/latest/reference/pip/?highlight=setuptools#build-system-interface. 'extras_require' è un'opzione in' setuptools' per l'installazione di 'extra' https://pythonhosted.org/setuptools/setuptools.html#declaring-extras-optional-features-with-the-own-dependencies – aaronfay

Problemi correlati