假设我有以下包结构:
package/
mynamespace-subpackage-a/
setup.py
mynamespace/
subpackage_a/
__init__.py
mynamespace-subpackage-b/
setup.py
mynamespace/
subpackage_b/
__init__.py
module_b.py
包 A 中 setup.py:
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(。如果不可能,那么以下选择之一可能会有所帮助:
将
a
和b
的分布(轮或源分布(放在本地目录中,然后使用pip的--find-links
选项(doc(:pip install --find-links=path/to/distributions mynamespace-subpackage-b
使用直接引用文件 URL,如PEP 440:
install_requires=['a @ file:///path/to/a.whl']
使用直接远程 URL(VCS如git会起作用(该 URL 可以是私有存储库或本地文件系统:
install_requires=['mynamespace-subpackage-a @ git+file:///path/to/mynamespace-subpackage-a@master']
,这假设setup.py
位于存储库的根目录。