从 conda 中为 pip3创建必要条件.txt

嗨,我通常使用 conda 来管理我的环境,但现在我在一个项目,需要比我的笔记本电脑多一点马力。因此,我试图使用我的大学的工作站,有新的英特尔至强。但是我没有管理员权限,而且工作站也没有 conda,所以我只能使用 viralenv 和 pip3。

如何从 conda 生成一个 requirements.txt,它将与 pip3venv一起工作?

conda list -e > requirements.txt

不生成兼容文件:

= is not a valid operator. Did you mean == ?

conda输出为:

# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: osx-64
certifi=2016.2.28=py36_0
cycler=0.10.0=py36_0
freetype=2.5.5=2
icu=54.1=0
libpng=1.6.30=1
matplotlib=2.0.2=np113py36_0
mkl=2017.0.3=0
numpy=1.13.1=py36_0
openssl=1.0.2l=0
pip=9.0.1=py36_1
pyparsing=2.2.0=py36_0
pyqt=5.6.0=py36_2
python=3.6.2=0
python-dateutil=2.6.1=py36_0
pytz=2017.2=py36_0
qt=5.6.2=2
readline=6.2=2
scikit-learn=0.19.0=np113py36_0
scipy=0.19.1=np113py36_0
setuptools=36.4.0=py36_1
sip=4.18=py36_0
six=1.10.0=py36_0
sqlite=3.13.0=0
tk=8.5.18=0
wheel=0.29.0=py36_0
xz=5.2.3=0
zlib=1.2.11=0

我想我只是手动改变所有的 ===,但有两个 =在 conda 输出。该换哪个?肯定有更简单的办法吧?

编辑: pip freeze > requirements.txt给出:

certifi==2016.2.28
cycler==0.10.0
matplotlib==2.0.2
matplotlib-venn==0.11.5
numpy==1.13.1
pyparsing==2.2.0
python-dateutil==2.6.1
pytz==2017.2
scikit-learn==0.19.0
scipy==0.19.1
six==1.10.0
204822 次浏览

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

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

现在有了 conda输出: 您正确地捕获了它们的注释,即 “我们生成了这个使用 conda 的库列表”。注意,python 本身在 conda 列表中,而(正确地)不在 requirements.txt中。conda复制自己的安装,这就是为什么它的库列表更长,并且有 python 本身。

pip生成一个安装在标准库顶部的软件包列表,以使您编写的软件包正常工作。希望有助于区分这两者。

此外,Pipenv是一个较新的工具,它既可以为您进行虚拟环境管理,也可以进行包管理。

为了防止有人在 conda 中从现有的项目中生成 requments.txt,可以使用以下命令

  • 转到您的项目环境 conda activate <env_name>

  • conda list 给出了用于环境的包的列表

  • conda list -e > requirements.txt 将所有有关软件包的信息保存到您的文件夹中

  • conda env export > <env_name>.yml

  • pip freeze

正如顶部的注释所指示的,输出为

conda list -e > requirements.txt

可用于创建 conda虚拟环境

conda create --name <env> --file requirements.txt

但是这个输出的格式不适合 pip

如果您想要一个可以用来创建 pip虚拟环境的文件(即格式正确的 requirements.txt) 您可以在 conda环境中安装 pip,然后使用 pip 创建 requirements.txt

conda activate <env>
conda install pip
pip freeze > requirements.txt

然后使用得到的 requirements.txt创建一个 pip虚拟环境:

python3 -m venv env
source env/bin/activate
pip install -r requirements.txt

当我测试这个时,输出中的包并不完全相同(pip包含较少的包) ,但是它足以建立一个功能性环境。

对于那些在 Requments.txt 中获得奇怪路径引用的用户,请使用:

pip list --format=freeze > requirements.txt

激活 Conda Env
conda activate flask-test

获取 conda env 的路径并复制它
conda list

lib\site-packages附加复制的路径并用 --path选项在 pip 中使用它
pip freeze --path C:\Users\username\Miniconda3\envs\flask-test\lib\site-packages > requirements.txt 在 Linux 上,路径类似于 /home/username/miniconda3/envs/flask-app/lib/python3.8/site-packages/

在 Conda 环境中,只需调用

pip freeze

我有:

ipykernel @ file:///C:/ci/ipykernel_1607454116140/work/dist/ipykernel-5.3.4-py3-none-any.whl
ipython @ file:///D:/bld/ipython_1612487184680/work
...

通缉格式:

ipykernel==5.3.4
ipython==7.20.0
...

在一个 激活的 Conda 环境我不得不使用

pip list --format=freeze

为那些喜欢在虚拟环境中使用 pip 的用户提供生成需求文件的正确格式。

保存到文件:

pip list --format=freeze > requirements.txt

正如上面的评论中提到的,正确的完整答案是:

pip list --format=freeze > requirements.txt

我编写了一些简单的 python 脚本,将 conda requments.txt 转换为 pip3。 只要复制下面的代码。

f = open(r"requirements.txt", "r").read()
f1 = f.split("\n")
for line in f1:
if "=" in line:
a = line.split("=")[0:-1]
print(a[0]+"==" + a[1])

然后复制打印输出;

输出样本:

_libgcc_mutex==0.1
_openmp_mutex==4.5
blas==1.0
brotli==1.0.9
bzip2==1.0.8