从.yaml离线的Conda环境

时间:2017-08-21 21:15:32

标签: yaml offline conda

我想在离线机器上的.yaml文件中创建一个Conda环境(即无法访问Internet)。在在线机器上,这非常好用:

conda env create -f environment.yaml

但是,它不能在离线机器上工作,因为找不到包。我该怎么做?

如果不可能,还有另一种简单的方法可以将我的完整Conda环境变为离线计算机(包括Conda和pip安装包)吗?

逐个浏览软件包以从.tar.bz2文件中安装它们,但它非常麻烦,所以我想避免这种情况。

2 个答案:

答案 0 :(得分:1)

如果你可以使用pip来安装软件包,你应该看一下devpi,特别是它的服务器。 devpi可以缓存通常从PyPI安装的软件包,因此只有在首次安装时它才会实际检索它们。您必须配置pip以从devpi服务器检索包。

由于您不想手动列出所有软件包及其依赖项,您应该在连接到互联网的计算机上:

  • 安装devpi服务器(我在Docker容器中运行)
  • 运行您的安装
  • 检查devpi存储库并收集所有.tar.bz2.whl文件(您可以对整个文件进行tar操作)

在未连接的机器上:

  • 安装devpi服务器和客户端
  • 使用devpi客户端将您收集的所有软件包(使用devpi upload)上传到devpi服务器
  • 确保您已配置pip来查看devpi服务器
  • 运行pip,它将找到本地服务器上的所有软件包。

devpi有一个小的学习曲线,由于加速和安装私有包(即没有上传到PyPI)作为普通依赖项的能力,已经值得遍历,只需生成包并上传它到你当地的devpi服务器。

答案 1 :(得分:0)

我想上面的Anthon的解决方案非常好,但万一有人对一个对我有用的简单解决方案感兴趣:

我首先使用conda env export>创建了一个指定环境的.yaml文件。 file.yaml。按照http://support.esri.com/en/technical-article/000014951上的说明,我自动下载了conda安装包的所有必要安装文件,并从文件中创建了一个通道。为此,我只是调整了上面链接中的代码来处理我的.yaml文件而不是他们使用的conda列表文件。此外,我通过循环遍历.yaml文件中的pip条目并使用pip download下载每个软件包,自动下载pip安装软件包所需的文件。此外,我自动从.yaml文件创建了单独的conda和pip需求列表。然后我使用带有脱机标志的conda create,带有conda要求的文件和我的自定义通道创建了环境。最后,我使用pip install和pip requirements文件以及包含pip安装文件的文件夹安装了pip要求--find-links。

这对我有用。唯一的问题是,如果您需要指定与正在运行的操作系统不同的操作系统,则只能下载带有pip下载的二进制文件,对于某些软件包,没有可用的二进制文件。这对我来说没问题,因为目标机器具有一些特性但未来可能会出现问题,因此我打算研究Anthon建议的解决方案。