在 conda 虚拟环境中以 pip 兼容格式创建 requirements.txt

昵称111

我在 Windows 10 PC 上创建了一个 conda 虚拟环境来处理一个项目。要安装所需的包和依赖项,我使用conda install <package>而不是pip install <package>按照https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html# 中提到的最佳实践在环境中使用 pip

为了分发我的软件,我选择分别针对 conda 和非 conda 用户创建一个 environment.yml 和一个 requirements.txt 文件。我能够将当前的虚拟环境导出到 yml 文件中,这样 conda 用户就得到了照顾。但是,为了让非 conda 用户能够复制相同的环境,我需要创建和共享 requirements.txt 文件。可以使用创建此文件,conda list --export > requirements.txt但此格式与 pip 不兼容,其他用户无法pip install -r requirements.txt在其系统上使用

使用pip freeze > requiremens.txt这里这里提到的解决方案这意味着非 conda 用户可以简单地pip install -r requirements.txt在虚拟环境中执行,他们可以在没有 conda 的情况下使用 virtualenv 创建该虚拟环境。

但是,如果您生成上述样式的 requiremets.txt 文件,您最终会得到一个带有符号链接的 requirements.txt 文件。这是因为我们尝试为使用conda install而不是pip install. 例如,我以类似方式生成的 requirements.txt 文件如下所示。

certifi==2020.6.20
cycler==0.10.0
kiwisolver==1.2.0
matplotlib @ file:///C:/ci/matplotlib-base_1603355780617/work
mkl-fft==1.2.0
mkl-random==1.1.1
mkl-service==2.3.0
numpy @ file:///C:/ci/numpy_and_numpy_base_1596215850360/work
olefile==0.46
pandas @ file:///C:/ci/pandas_1602083338010/work
Pillow @ file:///C:/ci/pillow_1602770972588/work
pyparsing==2.4.7
python-dateutil==2.8.1
pytz==2020.1
sip==4.19.13
six==1.15.0
tornado==6.0.4
wincertstore==0.2

当使用此文件安装依赖项时,这些符号链接将导致错误。

我采取的步骤使我进入了上述 requirements.txt 文件:

  1. 使用创建了一个新的 conda 虚拟环境 conda create -n myenv python=3.8
  2. 使用激活新创建的 conda 虚拟环境 conda activate myenv
  3. 安装 pip 使用 conda install pip
  4. 使用安装的熊猫 conda intall pandas
  5. 安装 matplotlib 使用 conda install matplotlib
  6. 使用生成了一个 pip 兼容的 requrements.txt 文件 pip freeze > requirements.txt

所以,我的问题是你如何坚持使用conda install而不是pip install同时仍然能够将你的软件包分发给 conda 和非 conda 用户的最佳实践

塔尼亚

我为上述问题找到的最佳解决方案是我将在下面描述的组合。对于conda,我首先将环境列表导出为environment.yml并省略包构建号,这通常是难以在另一个操作系统上重现环境的原因:

conda env export > environment.yml --no-builds

输出:

name: myenv
channels:
  - defaults
  - conda-forge
dependencies:
  - blas=1.0
  - ca-certificates=2020.10.14
  - certifi=2020.6.20
...

对于pip,您上面描述的内容显然是较新版本的 pip 中的一个众所周知的问题获得“干净”requirements.txt文件的解决方法是这样导出:

pip list --format=freeze > requirements.txt

输出:

certifi==2020.6.20
cycler==0.10.0
kiwisolver==1.2.0
matplotlib==3.3.2
mkl-fft==1.2.0
...

请注意,上面在pipand之间是不同的conda,这很可能是因为conda它比pipPython 包更通用,并且不仅包括 Python 包。

就我个人而言,我发现对于分发包,通过检查您的代码(您做了什么导入?)来确定所需的最小包集及其版本可能更简洁,而不是盲目地导出完整pipconda列表,哪个可能最终(无论是否意外)包含使用该包并不是真正必要的包。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章