在conda虚拟环境中创建符合pip格式的requirements.txt文件。

11 浏览
0 Comments

在conda虚拟环境中创建符合pip格式的requirements.txt文件。

我在Windows 10 PC上创建了一个conda虚拟环境来进行项目开发。为了安装所需的包和依赖项,我使用conda install 而不是pip install ,这是根据最佳实践中提到的https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#using-pip-in-an-environment

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

使用pip freeze > requirements.txt是一个解决方案,可以在这里这里找到。这意味着非conda用户可以在没有conda的情况下使用virtualenv创建的虚拟环境中执行pip install -r requirements.txt

然而,如果按照上述方式生成requiremets.txt文件,你将得到一个带有符号链接的requirements.txt文件。这是因为我们尝试为使用conda install而不是pip install安装的包创建requirements.txt文件。

例如,我以类似的方式生成的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 create -n myenv python=3.8创建一个新的conda虚拟环境
  2. 使用conda activate myenv激活新创建的conda虚拟环境
  3. 使用conda install pip安装pip
  4. 使用conda intall pandas安装pandas
  5. 使用conda install matplotlib安装matplotlib
  6. 使用pip freeze > requirements.txt生成与pip兼容的requrements.txt文件

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

0
0 Comments

在使用conda虚拟环境时,我们可能会遇到一个问题:在使用pip安装的软件包和conda安装的软件包之间存在不兼容的情况。为了解决这个问题,我们需要创建一个符合pip兼容格式的requirements.txt文件。

问题的原因是,当我们使用pip freeze命令时,它会返回环境中安装的所有软件包,而不仅仅是我们应用程序所使用的软件包。这可能会导致requirements.txt文件中包含许多不必要的软件包。

为了解决这个问题,我们可以使用pipreqs工具。这个工具可以根据我们应用程序中的导入语句,只包含我们实际使用的软件包。

下面是一个示例,演示如何使用pipreqs创建requirements.txt文件:

首先,我们需要安装pipreqs工具。可以使用以下命令安装:

pip install pipreqs

安装完成后,我们可以使用以下命令创建requirements.txt文件:

pipreqs /home/project/location

这将在指定的目录(/home/project/location)中成功保存requirements.txt文件。

最终生成的requirements.txt文件将只包含我们应用程序所使用的软件包,如下所示:

wheel==0.23.0
Yarg==0.1.9
docopt==0.6.2

我们可以查看pipreqs的文档了解更多信息。

通过使用pipreqs工具,我们可以创建一个符合pip兼容格式的requirements.txt文件,只包含我们应用程序所使用的软件包,从而解决pip和conda之间的不兼容问题。

0
0 Comments

在conda虚拟环境中,创建一个符合pip兼容格式的requirements.txt文件的原因是为了方便在其他环境中安装相同的依赖包。下面是解决该问题的方法:

在bash shell中运行以下命令:

conda list | awk {'print $1'} |sed '/#/d;/_/d'> requirements.txt

在上述代码中,我只是获取依赖包的名称,并从文件中删除以#_开头的行。这不会包含任何依赖包的版本信息。

*这可以作为bash脚本运行。

0
0 Comments

在使用conda虚拟环境时,创建一个符合pip兼容格式的requirements.txt文件是一个常见的问题。下面是解决这个问题的原因和方法:

问题出现的原因是pip在较新的版本中存在一个已知问题,导致创建的requirements.txt文件包含了符号链接。而conda更加通用,不仅包含Python包,因此conda和pip导出的包列表是不同的。

解决方法是首先使用conda将环境列表导出为environment.yml文件,并省略软件包的构建号。然后使用pip将包列表导出为requirements.txt文件。

具体步骤如下:

1. 使用以下命令将conda环境列表导出为environment.yml文件:

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

导出的environment.yml文件示例:

name: myenv

channels:

- defaults

- conda-forge

dependencies:

- blas=1.0

- ca-certificates=2020.10.14

- certifi=2020.6.20

...

2. 使用以下命令将pip包列表导出为requirements.txt文件:

pip list --format=freeze > requirements.txt

导出的requirements.txt文件示例:

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

需要注意的是,conda和pip导出的列表是不同的,这是因为conda包含了更多的内容。

个人经验来看,为了分发一个包,最好是通过检查代码(导入了哪些包)来确定所需的最小包集和它们的版本,而不是盲目地导出完整的pip或conda列表,这可能会(无意或有意地)包含不真正需要使用该包的软件包。

另外,还有一个名为"conda-minify"的包可以实现上述的操作,它使用有向无环图来找到所有其他包的最高级别包作为依赖关系的来源。

以上就是解决在conda虚拟环境中创建符合pip兼容格式的requirements.txt文件的原因和方法。

0