假设我具有以下软件包结构:
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`]
答案 0 :(得分:1)
根据我对问题的了解,我认为应该是:
package/mynamespace-subpackage-b/setup.py
:
#...
setup(
name='mynamespace-subpackage-b',
# ...
install_requires=[
'mynamespace-subpackage-a',
# ...
],
)
这显然是假设在安装a
时可以找到b
的 pip ,这意味着a
的发行版应该发布在某种索引上(例如例如PyPI)。如果不可能,那么以下替代方法之一可能会有所帮助:
将a
和b
的分布( wheel 或 source分布)放置在本地目录中,然后使用 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 URL(例如 git 这样的 VCS 可以),URL可以指向私有存储库,也可以位于本地文件系统上: install_requires=['mynamespace-subpackage-a @ git+file:///path/to/mynamespace-subpackage-a@master']
,这假定setup.py
位于存储库的根目录。