在安装点需求时忽略一些要求

问题描述:

我正在使用requirements.txt来安装我的virtualenv的需求。我使用可以在远程主机上安装需求的部署。在安装点需求时忽略一些要求

问题:

  1. 忽略一些要求

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

根据我的解决方案:

  1. 我可以grep安装的软件包,并进行requirements2.txt只有需要的人。 (另外,删除从GIT安装的软件包)

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

  3. 其他解决方案?

+1

'pip install'已经忽略了已经安装的任何东西。你是什​​么意思*“忽略一些要求”*,那么代码将如何工作? – jonrsharpe

+0

@jonrsharpe对于这项任务不一定是正确的;但通常一些要求是可选的并且使安装更麻烦。当我知道我不需要这个时,我经常从windows的cvxpy中移除一些解算器(ecos)。但是这需要对lib的一些理解。 – sascha

+0

您是否研究过提供'setup.py',以便您清楚哪些是需求,哪些是额外的? – jonrsharpe

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


如果你有一个virtualenv中,只需要迅速升级到了新的要求或版本的限制,但如果现有的包满足不升级标准,你可以使用

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

由于手册说:

--upgrade-strategy <upgrade_strategy> 确定依赖升级应如何处理。 “渴望” - 依赖关系升级 ,不管当前安装的版本是否满足升级包的要求 。 “仅 - 如果需要” - 仅在 不符合 升级包的要求时才升级。


对于可选的依赖关系,典型的解决方案是setuptools的extra requirements。例如,我用它来开发& DOC建设要求:

# 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] 

您可以使用可选的依赖关系为“额外模式”定义任何名称。