如何使用 miniconda 离线安装多个 conda 包并进行正确的依赖解析?

问题描述 投票:0回答:1

我有一个版本化的软件,它依赖于几个Python包。我需要将其安装在无法访问互联网的基础设施上。理想情况下,作为我的唯一事实来源,我想使用environment.yml 文件,但不知道如何做到这一点。

出于组织原因,在我的目标机器上,我只有 miniconda 可用。

我尝试过的事情

在进行以下任何操作之前,我已下载所有 bz2/conda 文件并将它们复制到目标计算机上的文件夹

pkgs
。在与 pkgs 文件夹相同的文件夹中,我放置了一个environment.yml 文件,如下所示:


name: my_env
channels:
  - conda-forge
  - defaults
dependencies:
  - bzip2=1.0.8=hcfcfb64_5
  # other packages
  - pip:
      - attrs==23.1.0
      # other packages

我还在目标机器上运行了

conda config --set offline True

  1. 创建新环境
    conda env create --file environment.yml

失败了

The following packages are not available from current channels:
[...]
Current channels:
 - https://repo.anaconda.com/pkgs/main/win-64
 - https://repo.anaconda.com/pkgs/r/win-64
 - https://repo.anaconda.com/pkgs/msys2/win-64
  1. 创建一个新环境,然后下载包的实际 bz2 文件,将它们复制到离线计算机,然后在目录上循环

    conda install <file_name>
    (作为 this 答案的修改。对于某些包,这会失败(我假设是因为那时它们的依赖关系尚未满足。)我需要执行多次,直到它不会产生任何错误,这看起来很麻烦。

  2. 创建一个新环境,然后将所有包放入 tar 中并将 tar 传递给

    conda install
    ,这应该根据 文档工作:

要安装包含许多 conda 软件包的 .tar 文件,请运行以下命令:

conda install /packages-path/packages-filename.tar

conda install .\pkgs.tar
尝试使用通道
defaults
执行命令,然后失败并显示

PackagesNotFoundError: The following packages are not available from current channels:
- .\pkgs.tar
  1. 根据这个答案,创建了一个环境并执行
    conda env update --file environment.yml --prune
    在包含下载的软件包的 pkgs 文件夹的文件夹中。

此操作失败并出现以下错误:

InvalidMatchSpec: Invalid spec 'bzip2[url=file:///C:/Users/<...>/pkgs/bzip2-1.0.8-hcfcfb64_5.conda]': Libmamba only supports a subset of the MatchSpec interface for now. You can only use ('name', 'version', 'build', 'channel', 'subdir'), but you tried to use ('url',).

  1. 尝试使用与
    --solver classic
    而不是 libmamba 相同的命令,因为 pip 由于代理错误而失败(尽管启用了离线模式)。结果,没有安装任何软件包。

可能存在重复问题

我相信这不是如何在离线时安装 conda 环境?的重复,因为该问题不涉及environment.yml。

我相信这不是如何使用 .yml 文件更新现有 Conda 环境的重复,因为该问题不涉及离线。

python conda miniconda
1个回答
0
投票

我不久前在工作中遇到了类似的问题,我相信以下步骤对我有用。

  1. 创建一个新的 Conda 环境并安装所有所需的软件包。 Conda 将为您处理依赖项。

  2. 导出在此安装的所有软件包的列表 环境到 .yml 文件。

    conda my_env export > env.yml

    这应该会为您提供一个包含所有依赖项的 .yml 文件。

  3. 创建一个新的 Conda 环境(这很重要,因为你不想要 用任何现有环境中的包污染它), 激活它,并使用下载指定的包

    --download-only
    旗帜。

    conda create --name download_env --env.yml --download-only

  4. Conda 将下载包并将它们存储在包缓存中 目录。您可以检查包缓存的实际位置 通过在 Conda 环境中运行

    conda info --envs
    来创建目录。 在输出中查找“pkgs 目录”条目,它将显示 当前 Conda 的包缓存目录的路径 环境。

  5. 将下载的包从Conda缓存目录复制到您的 离线目标机。

  6. 在离线计算机上,使用以下命令创建新的 Conda 环境 复制的包和

    --use-local flag
    。在里面运行这个 将下载的 Conda 软件包复制到的目录。

    conda create --name new_env --use-local --file env.yml

  7. 激活新创建的环境:

    conda activate new_env

© www.soinside.com 2019 - 2024. All rights reserved.