sampers
sampers

Reputation: 473

Install dependencies of used namespaced packages

Let's say I have the following package structure:

package/
    mynamespace-subpackage-a/
        setup.py
        mynamespace/
            subpackage_a/
                __init__.py

    mynamespace-subpackage-b/
        setup.py
        mynamespace/
            subpackage_b/
                __init__.py
            module_b.py

with setup.py in package a:

from setuptools import find_packages, setup

setup(
    name='mynamespace-subpackage-a',
    ...
    packages=find_packages(),
    namespace_packages=['mynamespace'],
    install_requires=['pandas']
)

and package b:

from setuptools import find_packages, setup

setup(
    name='mynamespace-subpackage-b',
    ...
    packages=find_packages(),
    namespace_packages=['mynamespace'],
    install_requires=[]
)

package b uses package a, but it does not have any references to the pandas library itself. So it is not listed in the install_requires, but should still be installed when pip install . is executed inside package b and package a should be packaged along with it.

What should be added in the second setup file to achieve and is this even possible? Or should pandas be in the requirement list of package b as well?

I would suspect something like:

install_requires = ['mynamespace.subpackage_a`]

Upvotes: 0

Views: 137

Answers (1)

sinoroc
sinoroc

Reputation: 22295

From what I understood from the question, I believe it should be:

package/mynamespace-subpackage-b/setup.py:

#...
setup(
    name='mynamespace-subpackage-b',
    # ...
    install_requires=[
        'mynamespace-subpackage-a',
        # ...
    ],
)

This obviously assumes that pip can found a when installing b, meaning a distribution of a should be published on some kind of index (such as PyPI for example). If it is not possible then maybe one of the following alternatives could help:

  • Place distributions of a and b (wheel or source distribution) in a local directory, and then use pip's --find-links option (doc): pip install --find-links=path/to/distributions mynamespace-subpackage-b

  • Use a direct reference file URL as seen in PEP 440: install_requires=['a @ file:///path/to/a.whl']

  • Use a direct remote URL (VCS such as git would work) the URL could be to a private repository or on the local file system: install_requires=['mynamespace-subpackage-a @ git+file:///path/to/mynamespace-subpackage-a@master'], this assumes setup.py is at the root of the repository.

Upvotes: 1

Related Questions