【发布时间】:2014-05-13 19:41:26
【问题描述】:
标题基本上说明了一切。我如何告诉pip freeze 忽略某些包,例如pylint 和pep8,以及它们的依赖关系?
【问题讨论】:
-
试试pipreqs。
标题基本上说明了一切。我如何告诉pip freeze 忽略某些包,例如pylint 和pep8,以及它们的依赖关系?
【问题讨论】:
我的方法如下:
.bashrc 我创建了以下别名:alias pipfreezeignore='pip freeze | grep -vFxf ignore_requirements.txt'
pip install jedi flake8 importmagic autopep8 yapf)。ignore_requirements.txt 文件中,如pip freeze > ignore_requirements.txt。pip install django)pipfreezeignore > requirements.txt(在ignore_requirements.txt所在的同一文件夹中)所以我只需要在requirements.txt中安装不在ignore_requirements.txt中的软件包如果您总是想忽略相同的包(通过所有虚拟环境),您可以重新定义别名,如 alias pipfreezeignore='pip freeze | grep -vFxf /abs/path/to/ignore_requirements.txt'
只需确保您的项目实际上不需要来自 ignore_requirements.txt 的任何包。
【讨论】:
可用的选项很少
根本不关心这些包是否存在于pip 输出中。
通过一些grep 过滤器过滤输出并获得干净的结果。
请注意,virtualenv 中的 pip freeze 不会报告全局安装的软件包(但它通常会报告 argparse 和 wsgiref 对我来说 - 似乎没有什么是真正完美的。)
pipwarm 命令这将调用 pip freeze 并根据需要修改输出(删除不需要的文件)。
我知道,我可能没有给你你所要求的答案,但也许 virtualenv 接近你所需要的,因为它允许这些包的全局存在并且仍然允许在 pip freeze 的输出中没有这些包.
pep8 和pylint 安装为脚本,但要远离pip 可见性如果您只关心将pylint 和pep8 用作命令行工具,但不要求pip freeze 可以看到它们,则有多种选择
pep8和pylint安装到virtualenv中并将脚本复制到/usr/bin
如果您将pylint 和pep8 安装到单独的virtualenv 中,请通过which pep8 和which pylint 找到可执行文件的位置,然后将这些文件复制到某个地方,它们将在那里可见,例如到/usr/bin。您从 virtualenv 复制或移动的脚本具有指向 virtualenv 中所需 python 包的硬编码路径,并且即使在复制时也会安全运行(仅脚本,不要触及相关 virtualenv 的其余部分)。请注意,无需激活 virutalenv 即可使其正常工作。
pep8 和 pylint 但继续在 virtualenv 中开发系统范围内安装的命令行工具通常安装在某个位置,这使得它们全局可见。同时,在 virtualenv 中调用时,pip freeze 看不到系统范围安装的包。
【讨论】:
pylint 和pep8)安装到virtualenv 中才能完全检查它们的源代码,但我不想将它们部署到服务器上。这是 Heroku,所以部署涉及到 pip freeze > requirements.txt。因此,这给我留下了我目前的解决方案,即通过类似虚假 pip 安装的方式手动发现它们的依赖关系,然后使用 vim 手动删除所有行,或者直接忽略它。
pip freeze 输出。
pylint 也会创建大量关于导入失败的垃圾邮件,因为它位于 virtualenv 之外并且无法在路径上看到它们。
在带有 powershell 的 Windows 上:
$exclude = 'pylint', 'pep8'
pip freeze |
Where-Object { $exclude -notcontains $_ } |
ForEach-Object { pip install --upgrade $_ }
【讨论】: