Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅针对项目需求的Pip冻结_Python_Pip - Fatal编程技术网

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