Python 仅针对项目需求的Pip冻结
当我运行Python 仅针对项目需求的Pip冻结,python,pip,Python,Pip,当我运行pipfreeze>requirements.txt时,它似乎包含所有已安装的软件包。这似乎是记录在案的行为 然而,我做了一些错误的事情,因为现在在与Django没有业务往来的项目中包括Django之类的东西 我如何获得这个项目的需求?或者将来如何安装一个包含pip的软件包以用于此项目。我想我错过了一些关于我使用这个命令的virtualenv的信息 编辑:谢谢Addison Klinge的建议 pip冻结-r requirements.txt | grep-B100“pip冻结”| gr
pipfreeze>requirements.txt
时,它似乎包含所有已安装的软件包。这似乎是记录在案的行为
然而,我做了一些错误的事情,因为现在在与Django没有业务往来的项目中包括Django之类的东西
我如何获得这个项目的需求?或者将来如何安装一个包含pip
的软件包以用于此项目。我想我错过了一些关于我使用这个命令的virtualenv
的信息
编辑:谢谢Addison Klinge的建议
pip冻结-r requirements.txt | grep-B100“pip冻结”| grep-v“pip冻结”
当我运行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
这将只输出版本为的libs
APScheduler==3.2.0
Eve==0.6.4
Eve-Elastic==0.3.8
然后替换需求文件
mv requirements-froze.txt requirements.txt
pipreqs可以为特定项目节省时间。
只是
我尝试了pipreqs
和pigar
两种方法,发现pigar
更好,因为它还可以生成关于它在哪里使用的信息,它还有更多的选项。如果你使用linux,那么就用sed
pip freeze | sed's/=.*$/'/'>requirements.txt
以下是基于前面评论的简化版本:
我对pip freeze
也有同样的问题。在我的例子中,问题是我运行了pip freeze
,但没有激活我的项目虚拟环境。我激活了虚拟环境,并且pip freeze>requirements.txt
工作正常
因此,请确保通过在Windows上运行\Scipts\activate
,或在Linux上运行source\bin\activate
来激活项目虚拟环境
如果virtualenv
具有全局访问权限,则应使用-l
或--local
选项运行pip freeze-l
,该选项根据
-l、 --本地
如果在具有全局访问权限的virtualenv中,请不要输出全局安装的软件包
pip
无法理解,您的项目与Django没有任何关系。因此,通常您希望创建一个不访问系统站点包的隔离虚拟环境,并使用--isolated
标志运行pip以忽略PYTHONPATH
中的内容。当然,您不应该在该环境中安装软件包,除非project@Alik好吧,这就是我害怕的。稍后我将研究如何创建虚拟环境。如果你想将此作为实际答案提交,我会接受。我必须对此进行调查,但我相信所有要求都是由pip freeze
添加的,这意味着要搜索的行将是第一行。感谢分享pip freeze-r
选项-我不知道!我认为grep
管道有点冗长/脆弱-更好的方法可能是pip freeze-r requirements.txt | sed'/freeze/,$d
。这会删除冻结行和列表末尾的所有后续行。我可能没有正确理解这一点,但这不会混淆install_requires和requirement.txt吗?requirement.txt应完整且详尽,其中安装要求应尽量少@Daniel Maksimovich,我认为您的意思是,该命令将不会像requirements.txt中那样输出所有所需的-pinted
包。这是正确的,因为包根据目标目录中文件的导入嗅探需求。但不,这不会混淆两者。在任何情况下,install requires
,将确保重新使用生成的requirements.txt将安装所有可能遗漏的需求。这生成了一个文件,其中没有python文件中的任何包,比如google cloud storage
,此外,pipreqs错误地获取了mysql连接器和hydra。在我看来,相当愚蠢的虫子。
mv requirements-froze.txt requirements.txt
pip install pipreqs
#then
pipreqs path/to/project
mv requirements.txt requirements.txt.bak
pip freeze -q -r requirements.txt.bak | awk '/.*pip freeze.*/ {exit} {print}' > requirements.txt