安装使用的命名空间包的依赖项

Install dependencies of used namespaced packages

假设我有以下包结构:

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']
)

和包 b:

from setuptools import find_packages, setup

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

包 b 使用包 a,但它没有对 pandas 库本身的任何引用。所以它没有在install_requires中列出,但在包b中执行pip install .时应该仍然安装并且包a应该与它一起打包。

应该在第二个 setup 文件中添加什么来实现,这甚至可能吗?或者 pandas 也应该在包 b 的需求列表中吗?

我怀疑是这样的:

install_requires = ['mynamespace.subpackage_a`]

根据我对问题的理解,我认为应该是:

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

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

这显然假设 pip 在安装 b 时可以找到 a,这意味着 a 的分发应该在某种类型上发布索引(例如 PyPI)。如果不可能,那么以下替代方法之一可能会有所帮助:

  • 放置 ab 的分布(wheelsource 分布)在本地目录中,然后使用 pip--find-links 选项 (doc):pip install --find-links=path/to/distributions mynamespace-subpackage-b

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

  • 使用 direct remote URLVCS 例如 git 会起作用) URL 可以是私有存储库或本地文件系统:install_requires=['mynamespace-subpackage-a @ git+file:///path/to/mynamespace-subpackage-a@master'],这假设 setup.py 位于存储库的根目录。