pip ignora dependency_links en setup.py

Tengo dependency_links en mi setup.py:

... dependency_links = ['http://github.com/robot-republic/python-s3/tarball/master.tar.gz#egg=python-s3'], ... 

Pero no funciona. Sin embargo, install_requires funciona bien. Tal vez hay otro método para configurar git repo como se requiere para setup.py?

Esta respuesta debería ayudar. En pocas palabras, debe especificar la versión (o “dev”) para #egg=python-s3 para que se vea como #egg=python-s3-1.0.0 .

Actualizaciones basadas en el comentario de @ Cerin:

  • Pip 1.5.x tiene un indicador para habilitar el procesamiento de enlaces de dependencia: --process-dependency-links . No lo he probado porque estoy de acuerdo con el punto a continuación.
  • Esta discusión parece indicar que el uso de enlaces de dependencia para pip es una mala práctica. Aunque esta función se alistó para la desaprobación, ya no lo es. Hay un caso de uso válido para paquetes privados.

Me doy cuenta de que esta es una pregunta antigua, pero, en caso de que te encuentres aquí como lo hice yo, esto es lo que me funcionó.

Tengo un paquete en GitHub (no registrado con pypi) que se basa en otros paquetes de GitHub (no-pypi). Pasé una cantidad excesiva de tiempo tratando de averiguar cómo conseguir pip para manejar esto correctamente. Incluiré lo que hice para arreglarlo aquí.

Poner dependencias en un archivo Requirements.txt es el método preferido para enumerar dependencias. Sin embargo, también debe completar install_requires en la configuración. Fue en esta etapa que me topé con un obstáculo en el que pip no quería instalar dependencias de GitHub.

La mayoría de los lugares, incluidas las respuestas a esta pregunta, le indican que complete la sección de configuración de dependency_links. Sin embargo, también debe completar el campo install_requires con el nombre del paquete al que se hace referencia en dependency_links.

Por ejemplo, si tu needs.txt contiene lo siguiente.

 somepackage==1.2.0 https://github.com/user/repo/tarball/master#egg=repo-1.0.0 anotherpackage==4.2.1 

Entonces, su llamada de configuración debería verse así:

 setup( name='yourpackage', version='1.7.5', packages=[], url='', license='', author='', author_email='', description='', install_requires=[ 'somepackage==1.2.0', 'repo==1.0.0', 'anotherpackage==4.2.1' ], dependency_links=[ 'https://github.com/user/repo/tarball/master#egg=repo-1.0.0' ] ) 

Ok, ahora tenemos nuestro paquete configurado; instalarlo es la siguiente tarea. Aquí es donde pasé mucho tiempo. No pude averiguar por qué especificar dependency_links aparentemente no hizo nada. El truco es que, en algunos casos, es necesario establecer el indicador permitir todo lo externo (puede ser más específico) para pip. Por ejemplo:

 pip install git+https://github.com/user/anotherrepo.git --process-dependency-links --allow-all-external 

¡Ya terminaste y funciona!

RENUNCIA DE RESPONSABILIDAD: los enlaces de dependencia y los indicadores, los enlaces de dependencia de proceso y el permiso para todo externo están en desuso, por lo que se eliminarán pronto. En el tiempo que pasé, no pude encontrar un mejor método preferido y aún así tengo la función de pip correctamente.

Un par de notas sobre algunos problemas que encontré, en particular para instalar desde repositorys privados.

La instalación desde pip & setuptools tiene algunas diferencias sutiles; Pero de esta manera debería funcionar para ambos.

 from setuptools import setup import os # get deploy key from https://help.github.com/articles/git-automation-with-oauth-tokens/ github_token = os.environ['GITHUB_TOKEN'] setup( # ... install_requires='package', dependency_links = [ 'git+https://{github_token}@github.com/user/{package}.git/@{version}#egg={package}-0' .format(github_token=github_token, package=package, version=master) ] 

Un par de notas aquí:

  • Para repositorys privados, necesita autenticarse con GitHub; La forma más sencilla que encontré es crear un touth outh, soltarlo en su entorno y luego incluirlo con la URL.
  • Debe incluir algún número de versión (aquí hay 0 ) al final del enlace, incluso si no hay un paquete en PyPI. Este tiene que ser un número real, no una palabra.
  • Necesitas prefacio con git+ para decirle a setuptools que es clonar el repository, en lugar de apuntar a un zip / tarball
  • version puede ser una twig, una etiqueta o un hash de confirmación.
  • --process-dependency-links proporcionar --process-dependency-links si se instala desde pip

desde pip versión 18.1 PEP 508 URL es compatible. Eso significa que ya no necesita los dependency_links obsoletos. En su lugar, escribe la dependencia directamente en la lista de necesidades de instalación. El ejemplo de @Chad se ve así:

 setup( name='yourpackage', version='1.7.5', packages=[], url='', license='', author='', author_email='', description='', install_requires=[ 'somepackage==1.2.0', 'repo==1.0.0 @ https://github.com/user/archive/master.zip#egg=repo-1.0.0', 'anotherpackage==4.2.1' ], ) 

Para instalar su paquete puede simplemente escribir:

 pip install yourpackage 

(sin –process-dependency-links)