我有一个版本化的软件,它依赖于几个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
。
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
创建一个新环境,然后下载包的实际 bz2 文件,将它们复制到离线计算机,然后在目录上循环
conda install <file_name>
(作为 this 答案的修改。对于某些包,这会失败(我假设是因为那时它们的依赖关系尚未满足。)我需要执行多次,直到它不会产生任何错误,这看起来很麻烦。
创建一个新环境,然后将所有包放入 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
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',).
--solver classic
而不是 libmamba 相同的命令,因为 pip 由于代理错误而失败(尽管启用了离线模式)。结果,没有安装任何软件包。我相信这不是如何在离线时安装 conda 环境?的重复,因为该问题不涉及environment.yml。
我相信这不是如何使用 .yml 文件更新现有 Conda 环境的重复,因为该问题不涉及离线。
我不久前在工作中遇到了类似的问题,我相信以下步骤对我有用。
创建一个新的 Conda 环境并安装所有所需的软件包。 Conda 将为您处理依赖项。
导出在此安装的所有软件包的列表 环境到 .yml 文件。
conda my_env export > env.yml
这应该会为您提供一个包含所有依赖项的 .yml 文件。
创建一个新的 Conda 环境(这很重要,因为你不想要 用任何现有环境中的包污染它), 激活它,并使用下载指定的包
--download-only
旗帜。
conda create --name download_env --env.yml --download-only
Conda 将下载包并将它们存储在包缓存中 目录。您可以检查包缓存的实际位置 通过在 Conda 环境中运行
conda info --envs
来创建目录。
在输出中查找“pkgs 目录”条目,它将显示
当前 Conda 的包缓存目录的路径
环境。
将下载的包从Conda缓存目录复制到您的 离线目标机。
在离线计算机上,使用以下命令创建新的 Conda 环境 复制的包和
--use-local flag
。在里面运行这个
将下载的 Conda 软件包复制到的目录。
conda create --name new_env --use-local --file env.yml
激活新创建的环境:
conda activate new_env