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

github, python, setuptools

Solution

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

Problem

I am creating a `setup.py` file for a project which depends on private GitHub repositories. The relevant parts of the file look like this: ``` from setuptools import setup setup(name='my_project', ..., install_requires=[ 'public_package', 'other_public_package', 'private_repo_1', 'private_repo_2', ], dependency_links=[ 'https://github.com/my_account/private_repo_1/master/tarball/', 'https://github.com/my_account/private_repo_2/master/tarball/', ], ..., ) ``` I am using `setuptools` instead of `distutils` because the latter does not support the `install_requires` and `dependency_links` arguments per this answer. The above setup file fails to access the private repos with a 404 error - which is to be expected since GitHub returns a 404 to unauthorized requests for a private repository. However, I can't figure out how to make `setuptools` authenticate. Here are some things I've tried: Use `git+ssh://` instead of `https://` in `dependency_links` as I would if installing the repo with `pip`. This fails because setuptools doesn't recognize this protocol ("unknown url type: git+ssh"), though the distribute documentation says it should. Ditto `git+https` and `git+http`. `https://<username>:<password>@github.com/...` - still get a 404. (This method doesn't work with `curl` or `wget` from the command line either - though `curl -u <username> <repo_url> -O <output_file_name>` does work.) Upgrading setuptools (0.9.7) and virtualenv (1.10) to the latest versions. Also tried installing distribute though this overview says it was merged back into setuptools. Either way, no dice. Currently I just have `setup.py` print out a warning that the private repos must be downloaded separately. This is obviously less than ideal. I feel like there's something obvious that I'm missing, but can't think what it might be. :) Duplicate-ish question with no answers here.

Original source

Related problems