2011-01-25 13 views
24

tengo paquete "A" con un setup.py y una línea de extras_requires como:¿Tiene extras de mango de pip de herramientas de configuración/fuentes basadas en distribución?

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

y un paquete "B" que depende de util:

install_requires = ['A[ssh]'] 

Si me quedo en el paquete python setup.py install B, que usa setuptools.command.easy_install debajo del capó, el extras_requires está correctamente resuelto, y se instala paramiko.

Sin embargo, si ejecuto pip /path/to/B o pip hxxp://.../b-version.tar.gz, el paquete A está instalado, pero paramiko no lo está.

Como pip "se instala desde la fuente", no estoy muy seguro de por qué esto no funciona. Debería invocar el archivo setup.py de B, luego resolviendo & instalando dependencias de B y A.

¿Esto es posible con pip?

+1

actualización de su pip pip 'instalar pip' -U y luego' PIP instalar"[ prueba] "' debe instalar la sección llamada 'extra_require' –

Respuesta

12

Esto se incluye desde la 1.1, que se lanzó en febrero de 2012 (un año después de que se hizo esta pregunta).

+0

Eso parece ser. Mi grep sobre el árbol fuente de pip no lo subió, ya que estaba buscando la cadena "extras_require", no solo "extras". – dsully

+5

Para la posteridad, use 'pip install packagename [extra1, extra2] == 2.1' como se describe en el ejemplo 6 [aquí] (https://pip.pypa.io/en/latest/reference/pip_install.html#examples) y en [esta publicación] (http://stackoverflow.com/a/26285009/1959808). –

19

Usamos setup.py y pip para administrar las dependencias de desarrollo para nuestros paquetes, aunque necesita una versión más nueva de pip (estamos usando 1.4.1 actualmente).

#!/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, 
) 

para instalar el paquete:

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

Desarrollar:.

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

Parece que 'pip install. [Develop]' (sin '-e') no funciona, y necesita utilizar una instalación editable si desea instalar extras de' .'. –

+0

Al usar 'pip install -e. [Develop]', ¿pip instala gevent y Fabric? ¿Y dónde está documentado este comportamiento? – laike9m

+0

Ese comando instalará todo, 'gevent',' matraz', 'Fabric' y' nose'. Pip usa internamente 'setuptools' para su sistema de compilación https://pip.pypa.io/en/latest/reference/pip/?highlight=setuptools#build-system-interface. 'extras_require' es una opción en' setuptools' para instalar 'extras' https://pythonhosted.org/setuptools/setuptools.html#declaring-extras-optional-features-with-the-own-dependencies – aaronfay

Cuestiones relacionadas