pip 安装environment.yml,就好像它是requirements.txt

Int*_*rer 14 python pip requirements.txt conda python-packaging

我有一个environment.yml文件,但不想使用 Conda:

name: foo
channels:
  - defaults
dependencies:
  - matplotlib=2.2.2
Run Code Online (Sandbox Code Playgroud)

是否可以像文件一样pip安装依赖项?environment.ymlrequirements.txt

我尝试过pip install -r environment.yml,但它不适用于pip==22.1.2.

Ahm*_*med 15

基于Beni的实现,我只是想调整一下代码,因为它有很多错误;

import os
import yaml

with open("environment.yaml") as file_handle:
    environment_data = yaml.safe_load(file_handle)

for dependency in environment_data["dependencies"]:
    if isinstance(dependency, dict):
      for lib in dependency['pip']:
        os.system(f"pip install {lib}")
Run Code Online (Sandbox Code Playgroud)

  • 该答案解决了问题,应标记为解决方案! (3认同)

小智 7

我已经实施了布莱恩在评论中建议的内容。

这将转换environment.yamlrequirements.txt

import yaml

with open("environment.yaml") as file_handle:
    environment_data = yaml.load(file_handle)

with open("requirements.txt", "w") as file_handle:
    for dependency in environment_data["dependencies"]:
        package_name, package_version = dependency.split("=")
        file_handle.write("{} == {}".format(package_name, package_version))
Run Code Online (Sandbox Code Playgroud)

这将直接使用以下命令安装依赖项pip

import os
import yaml

with open("environment.yaml") as file_handle:
    environment_data = yaml.load(file_handle)

for dependency in environment_data["dependencies"]:
    package_name, package_version = dependency.split("=")
    os.system("pip install {}=={}".format(package_name, package_version))

Run Code Online (Sandbox Code Playgroud)

注意:为了简单起见,我省略了错误处理和包定义的任何其他变体(例如,大于或等于某个版本的包版本的规范)。


Mar*_*ark 6

不,pip不支持这种格式。此处记录了需求文件所需的格式。您必须手动或通过自动执行此过程的脚本将environment.yml文件转换为某种格式。requirements.txt但是,请记住,并非 Conda 上的所有包都可以在 PyPI 上使用。


mer*_*erv 5

一个答案提出了重要的一点:没有直接转换,因为 Conda 是通用包管理器,因此包含其他包。此外,Conda 包通常可以有不同的名称。所提出的解析解决方案都没有涵盖这种情况。

就我个人而言,我认为最有效的完整方法是使用 Mamba 重新创建环境,然后pip在环境中使用转储出合法的requirements.txt.

# use mamba, not conda
mamba env create -n foo -f environment.yaml
mamba install -yn foo pip
mamba run -n foo pip list --format freeze > requirements.txt
mamba env remove -n foo
Run Code Online (Sandbox Code Playgroud)

也就是说,不要想太多并使用手头的可靠工具。