从conda创建requirements.txt文件给pip3使用。

11 浏览
0 Comments

从conda创建requirements.txt文件给pip3使用。

我通常使用conda来管理我的环境,但现在我正在进行一个需要比我的笔记本电脑更强大的项目。所以我想使用我的大学工作站,它们配备了新的Intel Xeon处理器。但是我没有管理员权限,工作站上没有conda,所以我被迫使用virtualenv和pip3来工作。\n如何从conda生成一个可以与pip3和venv一起使用的requirements.txt文件?\n\"conda list -e > requirements.txt\"无法生成兼容的文件:\n\"=\"不是有效的运算符。你是不是想要\"==\"?\nconda的输出是:\n# 这个文件可以用来创建一个环境,使用命令:\n# $ conda create --name --file \n# 平台:osx-64\ncertifi=2016.2.28=py36_0\ncycler=0.10.0=py36_0\nfreetype=2.5.5=2\nicu=54.1=0\nlibpng=1.6.30=1\nmatplotlib=2.0.2=np113py36_0\nmkl=2017.0.3=0\nnumpy=1.13.1=py36_0\nopenssl=1.0.2l=0\npip=9.0.1=py36_1\npyparsing=2.2.0=py36_0\npyqt=5.6.0=py36_2\npython=3.6.2=0\npython-dateutil=2.6.1=py36_0\npytz=2017.2=py36_0\nqt=5.6.2=2\nreadline=6.2=2\nscikit-learn=0.19.0=np113py36_0\nscipy=0.19.1=np113py36_0\nsetuptools=36.4.0=py36_1\nsip=4.18=py36_0\nsix=1.10.0=py36_0\nsqlite=3.13.0=0\ntk=8.5.18=0\nwheel=0.29.0=py36_0\nxz=5.2.3=0\nzlib=1.2.11=0\n我本来想手动将所有的\"=\"改为\"==\",但是conda输出中有两个\"=\"。我该改哪一个?肯定有更简单的方法吧?\n编辑:\"pip freeze > requirements.txt\"给出了以下结果:\ncertifi==2016.2.28\ncycler==0.10.0\nmatplotlib==2.0.2\nmatplotlib-venn==0.11.5\nnumpy==1.13.1\npyparsing==2.2.0\npython-dateutil==2.6.1\npytz==2017.2\nscikit-learn==0.19.0\nscipy==0.19.1\nsix==1.10.0

0
0 Comments

在讨论中,我想提到你实际上可以看到pipconda的角色之间的一些分离。

pip是一个标准的包管理器,它只做一件事并且做得很好。可以在一个环境中生成requirements.txt文件,并通过pip在一个新环境中安装。

现在有conda输出:你正确地捕捉到他们的评论,其中说'我们生成了这个库列表以便与conda一起工作'。请注意,Python本身在conda的列表中,并且(正确地)不在requirements.txt中。conda复制自己的安装,这就是为什么它的库列表更长,并且包含Python本身的原因。

pip生成了一个在标准库之上安装的包的列表,以使您编写的包工作。希望这有助于区分这两者。

此外,pipenv是一个较新的工具,可以为您提供虚拟环境和包管理。

pipenv仍然是Python基础之上的一个工具,就像pip一样。它不会处理Python之外的依赖。这就是conda的作用,它处理更大的图景,详见pip和conda之间的区别是什么?

虽然这个答案提供了一些额外有用的信息,但它没有提供与conda和pip一起使用的实际命令。

0
0 Comments

问题的原因是在conda环境中使用pip freeze命令输出的格式不符合预期。输出结果中的包名和版本号之间使用了@符号,而期望的格式是使用==符号进行分隔。

解决方法是在激活的conda环境中使用pip list --format=freeze命令来获取正确的格式。然后可以将结果保存到requirements.txt文件中,方法是使用命令pip list --format=freeze > requirements.txt。

这样就可以得到符合预期的格式的requirements.txt文件,其中每行包含一个包名和版本号,使用==符号进行分隔。这个文件可以被用作pip的虚拟环境的需求文件,方便其他人使用pip进行包管理。

代码如下:

pip list --format=freeze > requirements.txt

0
0 Comments

从上述内容中可以看出,问题的出现原因是conda list -e > requirements.txt命令生成的requirements.txt文件不符合pip的正确格式。解决方法是在conda环境中安装pip,然后使用pip freeze命令生成正确格式的requirements.txt文件。接下来可以使用生成的requirements.txt文件创建一个pip虚拟环境。如果在requirements.txt中出现奇怪的路径引用,可以使用pip list --format=freeze > requirements.txt命令代替。这个解决方法提供了具体的命令来回答原始的问题,是最佳答案。另外,如果使用conda,最好的选择是使用conda env export > environment.yml命令来创建虚拟环境,并且提交environment.yml文件,然后使用conda env create -f environment.yml命令来恢复环境。但是需要注意,原问题是在一个只安装了pip而没有安装conda的机器上创建虚拟环境,所以这个方法不适用。

0