Python setuptools: How can I list a private repository under install_requires? Python setuptools: How can I list a private repository under install_requires? python python

Python setuptools: How can I list a private repository under install_requires?


I was trying to get this to work for installing with pip, but the above was not working for me. From [1] I understood the PEP508 standard should be used, from [2] I retrieved an example which actually does work (at least for my case).

Please note; this is with pip 20.0.2 on Python 3.7.4

setup(    name='<package>',...    install_requires=[        '<normal_dependency>',         # Private repository        '<dependency_name> @ git+ssh://git@github.com/<user>/<repo_name>@<branch>',         # Public repository        '<dependency_name> @ git+https://github.com/<user>/<repo_name>@<branch>',    ],)

After specifying my package this way installation works fine (also with -e settings and without the need to specify --process-dependency-links).

References[1] https://github.com/pypa/pip/issues/4187[2] https://github.com/pypa/pip/issues/5566


Here's what worked for me:

  install_requires=[      'private_package_name==1.1',  ],  dependency_links=[      'git+ssh://git@github.com/username/private_repo.git#egg=private_package_name-1.1',  ]

Note that you have to have the version number in the egg name, otherwise it will say it can't find the package.


I couldn't find any good documentation on this, but came across the solution mainly through trial & error. Further, installing from pip & setuptools have some subtle differences; but this way should work for both.

GitHub don't (currently, as of August 2016) offer an easy way to get the zip / tarball of private repos. So you need to point setuptools to tell setuptools that you're pointing to a git repo:

from setuptools import setupimport 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)        ] 

A couple of notes here:

  • For private repos, you need to authenticate with GitHub; the simplest way I found is to create an oauth token, drop that into your environment, and then include it with the URL
  • You need to include some version number (here is 0) at the end of the link, even if there's no package on PyPI. This has to be a actual number, not a word.
  • You need to preface with git+ to tell setuptools it's to clone the repo, rather than pointing at a zip / tarball
  • version can be a branch, a tag, or a commit hash
  • You need to supply --process-dependency-links if installing from pip