标题基本上已经说明了一切。我该如何告诉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
过滤器过滤输出并使结果清晰。
请注意,虚拟环境中的 pip freeze 不会报告全局安装的包(但通常会为我报告 argparse 和 wsgiref - 没有完美的解决方法)。
pipwarm
命令调用 pip freeze 并根据需要修改输出(删除不需要的文件)。
我知道,我可能没有给出你想要的答案,但也许虚拟环境接近你所需的,因为它允许这些包的全局存在,同时允许在 pip freeze 的输出中没有这些包。
pep8
和 pylint
安装为脚本,但不让它们被 pip 发现如果您只关心将 pylint
和 pep8
作为命令行工具可用,但不需要它们在 pip freeze
中可见,有多种选择:
pep8
和 pylint
安装到 virtualenv 中,并将脚本复制到 /usr/bin
如果您将 pylint
和 pep8
安装到单独的虚拟环境中,请通过 which pep8
和 which pylint
找到可执行文件的位置,并将这些文件复制到某个可见的位置,例如 /usr/bin
。从虚拟环境中复制或移动的脚本具有对虚拟环境中所需 python 包的硬编码路径,并且即使复制(只是脚本,不要触摸其他相关虚拟环境),它们也可以安全运行。请注意,无需激活给定的虚拟环境即可使其工作。
pep8
和 pylint
,但在虚拟环境中进行开发通常会将系统范围内安装的命令行工具安装到全局可见的位置。同时,在虚拟环境中调用 pip freeze 时,系统范围内安装的包不会被看到。
pylint
和pep8
安装到虚拟环境中,以便能够完全检查源代码,但我不想将它们部署到服务器上。这是Heroku,因此部署涉及pip freeze > requirements.txt
。因此,这让我采取了当前的解决方案,即通过类似于虚假pip安装的方式手动发现其依赖项,然后手动使用vim删除所有行,或者只是忽略它。 - Two-Bit Alchemistpip freeze
输出。 - Jan Vlcinskypylint
也会创建大量垃圾信息,因为它在虚拟环境之外,无法在路径上看到失败的导入。 - Two-Bit Alchemist在Windows系统中使用PowerShell:
$exclude = 'pylint', 'pep8'
pip freeze |
Where-Object { $exclude -notcontains $_ } |
ForEach-Object { pip install --upgrade $_ }