【发布时间】:2019-07-19 01:50:28
【问题描述】:
如果我的 pip 可安装包中的setup.py 有依赖项怎么办?
例如,在setup.py 你会看到:
from pipenv.project import Project
from pipenv.utils import convert_deps_to_pip
这样我就可以解析我的 pip 包依赖项了:
pfile = Project(chdir=False).parsed_pipfile
requires = convert_deps_to_pip(pfile['packages'], r=False)
并将它们交给setup()。
setup(
...
install_requires = requires,
...)
但是,我不能假设这个 pip 包的用户安装了pipenv。
如果我将pipenv 添加为依赖项,那么setup.py 将在通过setup.py 实际安装之前尝试import pipenv。
如果您尝试在干净的环境中 pip 安装我的包,会发生以下情况:
from pipenv.project import Project
ModuleNotFoundError: No module named 'pipenv'
如果我在运行之前pip install pipenv,然后在项目根目录中pip install -e ./,则安装工作正常。
我想不出一个好的解决方案...
【问题讨论】:
-
您不应该将顶级导入放在
setup.py中,因为可能尚未安装依赖项(正如您已经发现的那样)。但是,您可以将依赖项添加到setup_requires并将它们导入自定义命令实现中。
标签: python pip setup.py pipenv