繁体   English   中英

Pip freeze for only 项目需求

[英]Pip freeze for only project requirements

当我运行pip freeze > requirements.txt时,它似乎包含所有已安装的包。 似乎是记录在案的行为。

但是,我做错了一些事情,因为现在在与 Django 没有业务的项目中包括 Django 之类的东西。

我如何获得这个项目的需求? 或者将来如何安装 package 和pip以用于此项目。 我想我错过了一些关于virtualenv的东西。

pipreqs 可以为特定项目节省时间。 只是

pip install pipreqs
#then
pipreqs path/to/project

Github 页面

我已经尝试了pipreqspigar并发现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文档)与其他答案中提到的使用pigarpipreqs的两个替代功能相比,因为pip freeze列出了有效的 package 名称

截至 2022 年 2 月,三者之间的不完全比较

标准\工具 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-package1my-package2 (包名称),它们安装在my/package1my/package2 ,它们由 Python 的命令import my.package1import 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 freezepip 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM