【问题标题】:Python installation treePython安装树
【发布时间】:2018-10-15 13:55:39
【问题描述】:

我想获得一组需求所需的所有依赖项的列表。 不是来自已安装的内容,而是来自所需内容(在 setup.py 示例中)。

如果有冲突,我也想得到它们。 我找到的最接近的工具是pip-compile,问题是他在找到第一个冲突时失败了。

我发现的所有其他工具(pip freeze、pydeptree、pipenv)都反映了已安装的内容,而不是所需的内容。

我的动机是以编程方式获取所有需求,尝试解决冲突(例如,允许高次要版本),创建 requirements.txt 并安装它。

【问题讨论】:

  • 试试这个pipreqs
  • 会试试的。但是从表面上看,我担心它会输出 requirements.txt 或者在我寻找我的依赖树有什么冲突的中间结果时会失败。我相信这是 pip-compile 等工具在内部保存的信息,并尝试通过自己的内部逻辑自行解决。
  • 试过 pipreqs,因为我担心它不起作用。它分析了工作文件夹,但根本没有遍历子依赖项。

标签: python python-3.x deployment pip devops


【解决方案1】:

pip-compile 来自pip-tools 这样做:

假设您有一个 Flask 项目,并希望将其固定用于生产。如果您有 setup.pyinstall_requires=['Flask'],则运行 pip-compile 不带任何参数:

$ pip-compile
#
# This file is autogenerated by pip-compile
# To update, run:
#
#    pip-compile --output-file requirements.txt setup.py
#
click==6.7                # via flask
flask==0.12.2
itsdangerous==0.24        # via flask
jinja2==2.9.6             # via flask
markupsafe==1.0           # via jinja2
werkzeug==0.12.2          # via flask

pip-compile 将生成您的requirements.txt,并固定所有 Flask 依赖项(以及所有底层依赖项)。您应该将requirements.txt 置于版本控制之下。

pip-compile 也可以将需求文件作为输入。

pip-sync,来自同一个包,将 virtualenv 与需求文件中的内容同步。这包括从 virtualenv 中删除不在提供的需求文件中的包。

【讨论】:

  • 克里斯,谢谢,但这不是我问的。它因冲突而失败
  • 不是吗?生成文件的内容包括整个依赖树。
  • 啊,现在我看到了你关于冲突的说明。
  • 没有。它在请求冲突时停止。
  • @LiorCohen,我认为它必须停止冲突。在不知道如何选择解决冲突的情况下,无法可靠地填充依赖关系树的其余部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 2022-11-08
  • 2020-01-22
  • 2019-12-04
  • 1970-01-01
相关资源
最近更新 更多