[英]Pip freeze for only project requirements
当我运行pip freeze > requirements.txt
时,它似乎包含所有已安装的包。 这似乎是记录在案的行为。
但是,我做错了一些事情,因为现在在与 Django 没有业务的项目中包括 Django 之类的东西。
我如何获得这个项目的需求? 或者将来如何安装 package 和pip
以用于此项目。 我想我错过了一些关于virtualenv
的东西。
我已经尝试了pipreqs
和pigar
并发现pigar
更好,因为它还能生成关于它在哪里使用的信息,它还有更多的选择。
我用这个命令
编辑:感谢 Addisson Klinke 的建议
pip freeze -r requirements.txt |grep -B100 "pip 冻结" |grep -v "pip 冻结"
pip freeze -r requirements.txt | sed '/freeze/,$ d'
当我运行pip freeze -r requirements.txt
,输出类似于
APScheduler==3.2.0
Eve==0.6.4
Eve-Elastic==0.3.8
## The following requirements were added by pip freeze:
arrow==0.8.0
Cerberus==0.9.2
我有一个这样的需求文件
APScheduler
Eve
Eve-Elastic
所以我得到这个输出和sed
来删除我不想要的依赖项。
首先将其输出到文件
pip freeze -q -r requirements.txt | sed '/freeze/,$ d' > requirements-froze.txt
这将只输出带有版本的库
APScheduler==3.2.0
Eve==0.6.4
Eve-Elastic==0.3.8
然后替换需求文件
mv requirements-froze.txt requirements.txt
我仍然建议使用官方pip freeze > requirements.txt
(文档)与其他答案中提到的使用pigar
和pipreqs
的两个替代功能相比,因为pip freeze
列出了有效的 package 名称。
标准\工具 | pip 冻结 > requirements.txt | 猪油 | pipreqs |
---|---|---|---|
姓名不匹配 (1) | Package my-package==1.0.0 |
模块my_package == 1.0.0 |
模块my_package==1.0.0 |
模块重载(二) | 所有包my-package1==1.0.0 , my-package2==2.0.0 |
没有任何 | 顶层模块(版本显示0.0.0) my==0.0.0 |
仅显示直接使用的包 | 不 | 是的 | 是的 |
最少的内容 | 是的 | 不 | 是的 |
(1) 模块和 package 名称之间可能存在不匹配,例如my-package
(包名称)与my_package
(模块名称)。
(2) 可以有多个包使用相同的顶级文件夹,例如my-package1
和my-package2
(包名称),它们安装在my/package1
和my/package2
,它们由 Python 的命令import my.package1
和import my.package2
。 请注意,pipreqs 为不存在的 package my
注释版本 0.0.0。
我知道这些是非常特殊的情况,但我希望向人们提供这个概述可以帮助理解限制并避免可能的错误。
这是基于之前评论的简化版本: https : //stackoverflow.com/a/40026169/4052041
mv requirements.txt requirements.txt.bak
pip freeze -q -r requirements.txt.bak | awk '/.*pip freeze.*/ {exit} {print}' > requirements.txt
激活virtualenv
后,执行python -E -m pip freeze
。 -E
标志表示,根据python --help
,忽略 PYTHON* 环境变量(例如 PYTHONPATH) ,因此 pip 它不会访问全局site-packages
。
如果您使用的是 linux,那么请使用sed
pip freeze | sed 's/==.*$/''/' > requirements.txt
我对pip freeze
有同样的问题。 在我的情况下,问题是我在没有激活我的项目虚拟环境的情况下运行了pip freeze
。 我激活了虚拟环境并且pip freeze > requirements.txt
工作正常。
因此,请确保通过在 Windows 上运行<virtualenv folder name>\\Scipts\\activate
或在 Linux 上运行source <virtualenv folder name>\\bin\\activate
来激活您的项目虚拟环境。
如果virtualenv
具有全局访问权限,您应该使用-l
或--local
选项运行pip freeze
, pip freeze -l
根据pip freeze 文档
-l, --local
如果在具有全局访问权限的 virtualenv 中,请不要输出全局安装的包。
我刚刚遇到了同样的问题,这是我找到的解决问题的方法。
首先在你的项目目录下创建venv,然后激活它。
对于 Linux/MacOS: python3 -m venv ./venv
source myvenv/bin/activate
对于 Windows: python3 -m venv .\\venv
env\\Scripts\\activate.bat
现在pip freeze > requirements.txt
应该只接受项目中使用的库。
注意:如果您已经开始了您的项目,则必须重新安装所有库才能将它们冻结在 pip 中。
pip install pipreqs,
pipreqs>requirements.txt
这很容易工作
我确实遇到过同样的情况。 激活虚拟环境并执行后
pip3 freeze > requirements.txt
仍然收集所有 package 安装在我的 WSL ubuntu 22.04
安装“pipreqs”并输入pipreqs> requirements.txt 后,我的 Wsl 卡住了。
最好的解决方案是pip3 freeze -l > requirments.txt
它只收集了我的本地 package 用于我的开发。
在 windows 和 Lunix Pipdeptree中有一个 package 对我有用。安装后,您可以使用 Pipdeptree 生成仅包含顶级包的 requirements.txt 文件。
Windows:
pipdeptree -f --warn silence | findstr /r "^[a-zA-Z0-9\-]" > requirements.txt
卢尼克斯:
pipdeptree -f --warn silence | grep -E '^[a-zA-Z0-9\-]+' > requirements.txt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.