从 conda 为 pip3 创建 requirements.txt

Posted

技术标签:

【中文标题】从 conda 为 pip3 创建 requirements.txt【英文标题】:From conda create requirements.txt for pip3 【发布时间】:2018-11-19 12:43:58 【问题描述】:

您好,我通常使用 conda 来管理我的环境,但现在我的项目需要比我的笔记本电脑更多的功能。所以我正在尝试使用我大学的工作站,这些工作站配备了新的英特尔至强。但我没有管理员权限,工作站也没有 conda,所以我不得不使用 virtualenv 和 pip3。

如何从 conda 生成一个可以与 pip3venv 一起使用的 requirements.txt

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 &gt; 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

【问题讨论】:

你可以在你的电脑上使用'pip freeze' 但是输出不同,我的意思是 conda 命令的包比pip freeze 的输出多。 这看起来有点奇怪,但通常你可以手动编辑 rewuiremrnts.txt 作为最后的手段。 pipenv 中的另一个选项,pip 和 virtualenv 的包装器 不,如果它正在工作,则没有。我觉得很奇怪,这不能做。是的,人们在环境管理器之间切换可能并不常见,但仍然......需要可以想象的。 我不确定,我没有看到完整的答案;从某种意义上说,您已经解释了这些工具的作用,但就我在 how 中看到的如何使用 pipenv 的 virtualenv 成功复制 conda 环境而言,没有解决方案。 【参考方案1】:

正如顶部的注释所示,

conda list -e &gt; requirements.txt

可用于创建conda虚拟环境

conda create --name &lt;env&gt; --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 包含的包较少)但足以设置功能环境。

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

pip list --format=freeze > requirements.txt

【讨论】:

这是最好的答案,应该是公认的答案,因为它提供了用于完成/回答原始 SO 问题的特定命令。 对于那些关注此线程并在requirements.txt 中获得奇怪路径引用的人,请改用pip list --format=freeze &gt; requirements.txt。参考:***.com/a/62886215/13095028 @JohnnyUtah 小心。创建一个完全空的环境将不包括pip,因此您的建议最终将安装所有这些包在预期的目标环境之外。此外,OP 显然是在询问是否要迁移到首先没有 Conda 的系统,因此转向 pipvenv 啊,好点@merv。您能否在创建和激活 Conda 环境之后以及运行pip install -r requirements.txt 之前显式安装pip @JohnnyUtah 当然,或者只使用 create 指定它:condo create -n foo python=3.8 pip 或 use a YAML like this(没有 anaconda)。【参考方案2】:

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

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

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

pip 生成安装在标准库之上的软件包列表,以使您编写的软件包工作。希望对区分两者有帮助。

另外pipenv 是一个更新的工具,它可以为你做虚拟环境和包管理。

【讨论】:

pipenv 仍然是 Python 基础之上的工具,就像 pip 一样。它不会处理 Python 外部 的需求。这就是 conda 的用途,要处理更大的画面,请参阅 What is the difference between pip and conda? 虽然这个答案提供了一些额外的有用信息,但它没有提供与 conda 和 pip 一起使用的实际命令。【参考方案3】:

在 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 &gt; requirements.txt。将包列表作为requirements.txt文件存储在项目目录中。【参考方案4】:

以防万一有人希望从 conda 中的现有项目生成 requirements.txt,请使用以下

转到你的项目环境conda activate &lt;env_name&gt;

conda list 为您提供用于环境的软件包列表

conda list -e &gt; requirements.txt 将所有关于包的信息保存到您的文件夹中

conda env export &gt; &lt;env_name&gt;.yml

pip freeze

【讨论】:

OP 想要一个可用的 requirements.txt 文件。这个程序如何帮助他们做到这一点? 这个答案非常有用,因为它提供了创建 yaml 文件以重新创建 conda 环境所需的确切包列表和命令,而不仅仅是 pip 包的列表。 艾西瓦特感谢分享。你能解释一下这种魔法是如何发生的吗?【参考方案5】:

激活 conda 环境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 &gt; requirements.txt 在 Linux 上,路径类似于 /home/username/miniconda3/envs/flask-app/lib/python3.8/site-packages/

【讨论】:

以上是关于从 conda 为 pip3 创建 requirements.txt的主要内容,如果未能解决你的问题,请参考以下文章

conda 创建虚拟环境——安装requirements.txt依赖

sh 使用conda从requirements.txt安装Python依赖包。

mac使用pip3安装tensorflow(不用conda)

pytorch安装(使用pip3装到conda环境下)

使用Pip3和conda在mac上安装软件包

conda创建环境时报错:NotWritableError: The current user does not have write permissions to a required path.