Cómo escribir setup.py para incluir un repository git como una dependencia

Estoy tratando de escribir setup.py para mi paquete. Mi paquete necesita especificar una dependencia en otro repository de git.

Esto es lo que tengo hasta ahora:

from setuptools import setup, find_packages setup( name='abc', packages=find_packages(), url='https://github.abc.com/abc/myabc', description='This is a description for abc', long_description=open('README.md').read(), install_requires=[ "requests==2.7.0", "SomePrivateLib>=0.1.0", ], dependency_links = [ "git+git://github.abc.com/abc/SomePrivateLib.git#egg=SomePrivateLib", ], include_package_data=True, ) 

Cuando corro

 pip install -e https://github.abc.com/abc/myabc.git#egg=analyse 

yo obtengo

No se pudo encontrar una versión que cumpla con el requisito SomePrivateLib> = 0.1.0 (de analizar) (de versiones:) No se encontró una distribución coincidente para SomePrivateLib> = 0.1.0 (de analizar)

Qué estoy haciendo mal ?

Puedes encontrar la manera correcta de hacerlo aquí .

 dependency_links=['http://github.com/user/repo/tarball/master#egg=package-1.0'] 

La clave no es dar un enlace a un repository git, sino un enlace a un archivo tar. Github crea un tarball de la twig maestra para usted si agrega /tarball/master como se muestra arriba.

Después de investigar el problema pip 3939 vinculado por @muon en los comentarios anteriores y luego la especificación PEP-508 , encontré el éxito al hacer que mi dependencia de repository privado se instale a través de setup.py usando este patrón de especificación en install_requires (no más dependency_links ):

 install_requires = [ 'some-pkg @ git+ssh://git@github.com/someorgname/pkg-repo-name@v1.1#egg=some-pkg', ] 

@v1.1 indica la etiqueta de lanzamiento creada en github y podría reemplazarse con una twig, cometer o un tipo diferente de etiqueta.

Desafortunadamente, la otra respuesta no funciona con repositorys privados, que es uno de los casos de uso más comunes para esto. Finalmente lo conseguí trabajando con un archivo setup.py que se parece a esto:

 from setuptools import setup, find_packages setup( name = 'MyProject', version = '0.1.0', url = '', description = '', packages = find_packages(), install_requires = [ # Github Private Repository - needs entry in `dependency_links` 'ExampleRepo' ], dependency_links=[ # Make sure to include the `#egg` portion so the `install_requires` recognizes the package 'git+ssh://git@github.com/example_organization/ExampleRepo.git#egg=ExampleRepo-0.1' ] )