Search code examples
pythonpipsetuptoolspypiegg

Configure setup.py to install requirement from repository URL


I am creating a module and need to prepare my setup.py file to have some requirements. One of the requirements is a fork of one package that is already in PyPI so I want to reference my GitHub repository directly.

I tried two configurations, the first one is:

setup(
    'name': 'mymodule',
    # other arguments
    install_requires=[
        'myrequirement',  # The dependency name
    ],
    dependency_links=[
        'https://github.com/ihhcarus/myrequirement.git#egg=myrequirement',  # This is my repository location
    ]
)

I create a local distribution of my module using python setup.py sdist and when I run pip install path/to/module/dist/mymodule-0.1.tar.gz it ends up installing the version on PyPI and not my repository.

The other configuration, I tried to change the requirement name to force searching for a dependency link like so:

setup(
    'name': 'mymodule',
    # other arguments
    install_requires=[
        'myrequirement_alt',  # The dependency name with a suffix
    ],
    dependency_links=[
        'https://github.com/ihhcarus/myrequirement.git#egg=myrequirement_alt',  # This is my repository location
    ]
)

But with this, I only end up getting an error that myrequirement_alt is not found...

So I ask, what is the right way to achieve this without using PyPI?


Solution

  • For dependency links to work you need to add the version number of the package to https://github.com/ihhcarus/myrequirement.git#egg=myrequirement_alt. or it will not know what to install.

    e.g.:

    setup(
        'name': 'mymodule',
        # other arguments
        install_requires=[
            'myrequirement',  # The dependency name
        ],
        dependency_links=[
            'https://github.com/ihhcarus/myrequirement.git#egg=myrequirement_alt-1.3'  # Link with version at the end
        ]
    )
    

    Note that I wouldn't recommend using dependency links at all as they're deprecated. You should probably, instead, use requirement files.