2012-01-17 12 views
9

Tengo un proyecto del cual me gustaría generar dos paquetes de Python separados. Quiero instalar estos paquetes usando pip.¿Múltiples proyectos usando múltiples scripts setup.py?

En respuestas a esta pregunta anterior, la recomendación general era escribir dos setup.py guiones: Multiple projects from one setup.py?

Así que probé una estructura como esta:

/myproject 
    setup_foo.py 
    setup_bar.py 
    /mypackage1 
    /mypackage2 
    ... 

En setup_foo.py fijo el script_name parámetro:

from distutils.core import setup 
setup(name = 'foo', 
     version = '2.0.0', 
     ..., 
     script_name = 'setup_foo.py') 

(También probé lo siguiente sin el parámetro - según th th e la documentación que por defecto a sys.argv [0])

creo foo-2.0.0.tar.gz usando

python setup_foo.py sdist 

Pero cuando pip install foo-2.0.0.tar.gz, me sale un error como este:

Unpacking .../foo-2.0.0.tar.gz 
Running setup.py egg_info for package from file:///...foo-2.0.0.tar.gz 
Traceback (most recent call last): 
    File "<string>", line 14, in <module> 
IOError: [Errno 2] No such file or directory: '/var/folders/wj/jv7n2pmn5d1g1jjx6khc8bx80000gn/T/pip-v3dujq-build/setup.py' 
Complete output from command python setup.py egg_info: 
Traceback (most recent call last): 
File "<string>", line 14, in <module> 
IOError: [Errno 2] No such file or directory: 
'/var/folders/wj/jv7n2pmn5d1g1jjx6khc8bx80000gn/T/pip-v3dujq-build/setup.py' 

Me estoy perdiendo algo de forma de instruir pip para usar setup_foo.py? ¿O debería colocar dos scripts, ambos llamados 'setup.py', en directorios separados?

Respuesta

6

La pregunta es por qué pones esos proyectos en un directorio. Mi recomendación sería separarlos adecuadamente y luego agregarlos a un virtualenv compartido a través de "setup.py develop -U". He estado allí, hecho eso, funciona maravillosamente.

De lo contrario, su próximo problema será compartir un "setup.cfg", "MANIFEST.in", etc. En general, tendrá un montón de problemas innecesarios, cada vez que rompa suposiciones de herramientas de configuración/distribuir.

I supongo que eligió la estructura anterior por lo que ambos paquetes se encuentran en la ruta de pitón automágicamente, el de "desarrollar -U" hace explícito, y citando a "importar este":

Explícito es mejor que implícito.

+0

Gracias por su respuesta! Estás casi en lo cierto sobre mis razones para elegir la estructura que ilustré; Yo tenía dos de ellos. En primer lugar, estoy usando PyDev/Eclipse y, si es posible, quería evitar las dependencias entre proyectos. En segundo lugar, mis dos distribuciones comparten casi todos los paquetes del proyecto, principalmente difieren en las herramientas de línea de comandos incluidas, por lo que dividirlos en dos o tres proyectos independientes parecía un poco excesivo. Si dos distribuciones en un proyecto frotan las herramientas de configuración de la manera incorrecta, puedo elegir tener una sola distribución y aceptar implementar todas las secuencias de comandos en todos los servidores. –

+1

Consulte http://code.google.com/p/pyroscope/source/browse/trunk/update-to-head.sh para obtener inspiración. Si instala en un virtualenv (siempre es una buena idea, incluso en una máquina de producción), puede vincular simbólicamente los stubs de herramientas y, por lo tanto, publicar un subconjunto seleccionado (consulte "ln -nfs $ (grep -l 'entry_point. * Pyrocore == '$ PWD/bin/*) $ {BIN_DIR: - ~/bin}/"comando). – pyroscope

+0

¡listo! Sí, esa es una forma más simple de ocultar/publicar subconjuntos de sripts. –

0

Parece que setuptools no admite scripts de configuración que no se llaman setup.py, al contrario que distutils. Creo que sería mejor informar el error a setuptools (bugs.python.org/setuptools) y distribuir (en bitbucket) a los desarrolladores.

+1

Puede ser una característica en lugar de un error ... la pregunta es qué efecto se supone que tiene "script_name". La documentación no es particularmente clara al respecto. –

+0

Los documentos de distutils contienen solo esto: http://docs.python.org/distutils/apiref#distutils.core.run_setup –

Cuestiones relacionadas