使用pip冻结忽略某些包及其依赖项

时间:2014-05-13 19:41:26

标签: python pip

标题基本上都说明了一切。如何告诉pip freeze忽略某些软件包,例如pylintpep8及其依赖项?

3 个答案:

答案 0 :(得分:5)

可用的选项很少

尝试简单的无知

根本不关心pip输出中存在的这些包。

从输出中删除这些行

通过某个grep过滤器过滤输出,并将结果清理干净。

使用virtualenv并且不要将不需要的软件包安装到其中

请注意,virtualenv中的pip冻结不会报告全局安装的软件包(但它通常会为我报告argparsewsgiref - 似乎没有什么是完美的。)

编写您自己的pipwarm命令

会调用pip冻结并根据需要修改输出(删除不需要的文件)。

我知道,我可能没有给你你要求的答案,但也许virtualenv接近你所需要的,因为它允许这些包的全球存在并且仍然允许在pip冻结的输出中没有这些包

安装pep8pylint作为脚本,但远离pip可见性

如果您只关心pylintpep8可用作命令行工具,但不要求它们对pip freeze可见,则有多个选项

pep8pylint安装到virtualenv并将脚本复制到/usr/bin

如果您将pylintpep8安装到单独的virtualenv中,请按which pep8which pylint查找可执行文件的位置,并将这些文件复制到可见的位置,例如到/usr/bin。您从virtualenv复制或移动的脚本在virtualenv中具有硬编码路径到所需的python包,并且即使在复制时也会安全运行(只是脚本,不要触及其他相关的virtualenv)。请注意,没有必要激活给定的virutalenv来使其正常工作。

在系统范围内安装pep8pylint但在virtualenv中继续开发

系统范围内安装的命令行工具通常安装在位置,这使它们全局可见。同时,在virtualenv中调用pip freeze时,系统范围内安装的软件包不会被看到。

答案 1 :(得分:5)

我的方法如下:

  1. 我的.bashrc我创建了以下别名:alias pipfreezeignore='pip freeze | grep -vFxf ignore_requirements.txt'
  2. 创建虚拟环境,并首先安装我不想跟踪的所有软件包(即pip install jedi flake8 importmagic autopep8 yapf)。
  3. 立即将其保存在ignore_requirements.txt文件中,如pip freeze > ignore_requirements.txt
  4. 安装其余软件包(例如pip install django
  5. 使用pipfreezeignore > requirements.txt(在ignore_requirements.txt所在的同一文件夹中),以便我requirements.txt了解ignore_requirements.txt
  6. 以外的已安装软件包

    如果您始终要忽略相同的软件包(通过所有虚拟环境),则可以在alias pipfreezeignore='pip freeze | grep -vFxf /abs/path/to/ignore_requirements.txt'中重新定义别名 只需确保您的项目实际上不需要ignore_requirements.txt的任何包。

答案 2 :(得分:1)

在使用powershell的Windows上

 $exclude = 'pylint', 'pep8'  

 pip freeze |  
             Where-Object { $exclude -notcontains $_ } |  
             ForEach-Object { pip install --upgrade $_ }