2012-05-23 14 views
5

Tengo un programa que usa dateutil del índice del paquete. Me gustaría tener setup.py para ver si está presente y tratar de obtenerlo usando easy_install si no está allí.¿Cómo se requiere e instala un paquete usando distutils de python 3.x?

The documentation for distutils parece indicar que esto se puede hacer usando la palabra clave requires en setup(), pero cuando intento, se instala en un sistema sin dateutil sin dar una advertencia o instalar el paquete requerido.

Lo único que pude encontrar en google fue this blog post about the same issue que tampoco tenía ninguna respuesta.

¿Estoy usando distutils mal? ¿Necesito la subclase distutils.command.install y hacer la comprobación/instalación yo mismo?

Respuesta

4

La descarga automática de dependencias es una característica introducida por setuptools que es un complemento de terceros a distutils, en particular, el argumento install_requires que agrega. Vea el setuptools documentation para más información.

Otra opción es usar el archivo requirements.txt con pip en lugar de utilizar easy_install como instalador de paquetes. pip se ha convertido en el instalador recomendado; ver el Python Packaging User Guide para más información.

Actualizar [2015-01]: La versión anterior de esta respuesta se refería a la horquilla distribute de setuptools. La horquilla distribute se ha fusionado desde entonces en un nuevo proyecto activo setuptools. distribute ahora está muerto y ya no se debe usar. setuptools y pip ahora se mantienen de forma muy activa y el apoyo de Python 3.

+0

El argumento requiere en distutils es inutilizable y sin usar, debe usar los archivos de requisitos de pip o installtools 'install_requires argumento hasta que PEP 345 se use ampliamente (hace que install_requires sea oficialmente compatible, con un nuevo nombre: requires-dist; distutils2 lo admite). –

+0

NB: este comentario se ha quedado obsoleto; Distribuir y configurar herramientas se han fusionado. Setuptools ahora tiene soporte 3.x completo. – Kevin

+0

@Kevin, gracias por el recordatorio; Mucho ha cambiado desde que se escribió la respuesta original. He actualizado la respuesta para reflejar un estado del mundo más actual: la fusión de Distribute y setuptools, el final del desarrollo de distutils2, la bendición de 'pip' como el instalador oficial de paquetes Python y el nuevo' Python Packaging User Guide'. –

0

El argumento install_requires en función de configuración de distutils me funcionan bien, sólo si puedo crear distributiva sdist, como: python setup.py sdist

+0

'install_requires' es ** no ** un argumento de' distutils.core.setup' es un [argumento adicional en distribute - setuptools] (http://pythonhosted.org/distribute/setuptools.html#new-and- changed-setup-keywords) por lo que debe usar la versión de distribución de 'setup' como se indicó anteriormente en @Ned. También puede ver [esta respuesta que describe el estado de los módulos de empaque] (http://stackoverflow.com/a/14753678/965798) en python. – marcz

Cuestiones relacionadas