【问题标题】:Ignoring some requirements when installing pip requirements安装 pip 要求时忽略一些要求
【发布时间】:2017-10-19 02:44:38
【问题描述】:

我正在使用requirements.txt 为我的 virtualenv 安装要求。我将 ansible 用于在远程主机上安装要求的部署。

问题:

  1. 忽略一些要求

  2. 忽略已安装的要求(例如pip freeze,如果出现包,请不要安装,甚至不要升级)

我的解决方案:

  1. 我可以 grep 已安装的软件包并创建一个 requirements2.txt 仅包含所需的软件包。 (另外,从 GIT 中删除正在安装的软件包)

  2. 我不明白--ignore-installed 在这种情况下会做什么?

  3. 还有其他解决方案吗?

【问题讨论】:

  • pip install 将已经忽略任何已安装的内容。 “忽略某些要求”是什么意思,那么代码将如何工作?
  • @jonrsharpe 此任务不一定正确;但通常有些要求是可选的,使安装更加麻烦。当我知道我不需要这个时,我经常从 Windows 上的 cvxpy 中删除一些求解器(ecos)。但这需要对 lib 有所了解。
  • 您是否考虑过提供setup.py,以便明确哪些是要求,哪些是附加条件?
  • @jonrsharpe 我的意思是我想浪费更少的时间来安装和检查需求。它只是去,获取新添加的需求,然后安装它。不,我还没有尝试过 setup.py 的东西。在这种情况下会有所帮助吗?

标签: python bash pip requirements.txt


【解决方案1】:

对于选择性依赖安装,唯一的方法确实是根据您的标准 grep/过滤requirements.txt 文件。但是,可能有用的现成解决方案很少:


如果你有一个virtualenv,只需要快速升级到新的要求或版本限制,而现有的包满足条件就不要升级,可以使用

pip install -U --upgrade-strategy=only-if-needed  ...

正如手册所说:

--upgrade-strategy <upgrade_strategy> 确定应如何处理依赖项升级。 "eager" - 依赖升级 不管当前安装的版本是否满足 升级包的要求。 “仅在需要时” - 是 只有当它们不满足要求时才升级 升级包。


对于可选依赖项,典型的解决方案是 setuptools 的extra requirements。例如,我将它用于开发和文档构建需求:

# setup.py
setup(
    ...,
    extras_require={
        'dev': ["pdbpp", "ipython"],
        'doc': ["sphinx"],
    },
)

然后您可以从 PyPI/DevPI 存储库和本地(作为可编辑库)安装它,如下所示:

pip install mylib[dev]
pip install mylib[doc]
pip install -e .[doc,dev]

您可以为具有可选依赖项的“额外模式”定义任何名称。

【讨论】:

    猜你喜欢
    • 2017-02-11
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    相关资源
    最近更新 更多