【问题标题】:What if setup.py has dependencies?如果 setup.py 有依赖项怎么办?
【发布时间】: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


【解决方案1】:

我找到了答案。我会发布它,以防有人最终来到这里。
答案就在这里:https://pipenv.kennethreitz.org/en/latest/advanced/#pipfile-vs-setup-py

Pipfile 用于应用程序。
但是,库(包)仍然可以从setup.py 生成Pipfile.lock

$ pipenv install -e .

【讨论】:

    猜你喜欢
    • 2021-08-26
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 2014-02-16
    相关资源
    最近更新 更多