在Linux上使用在Windows创建的conda虚拟环境

5

我正在将一些环境从PC迁移到Linux。

在Windows上,我运行以下命令:

C:\foo> conda env export > environment.yml

后来,在 Linux 系统上,我运行了以下命令:

$ conda env create -f environment.yml

但是我遇到了下面的错误:
ResolvePackageNotFound: 
  - icc_rt=2017.0.4
  - vc=14
  - vs2015_runtime=14.0.25123
  - wincertstore=0.2
  - qt==5.9.5=vc14he4a7d60_0

我认为这一定是一个已经解决的问题。

请比我更聪明的人告诉我他们如何解决这个问题?

谢谢!


这个回答解决了你的问题吗?从Windows迁移Conda环境到Linux - muxevola
2个回答

9
在导出您的环境时,请使用 --from-history 选项。它将仅导出您明确安装的库,而不是依赖项。
conda env export --from-history > environment.yml

不会导出平台特定信息,可以避免许多麻烦。

通常某些依赖项是平台特定的。此外,默认的conda env export将平台特定信息放在libs中。这将使在Windows中创建的environment.yml文件,在尝试在Linux中重新创建时失败,反之亦然。

由于它们没有记录所有依赖项的依赖关系,因此conda和pip在另一台机器上完全重现环境并不是很好。通常情况下不会有问题,但是如果出现问题,则很难发现依赖项的依赖项的版本略有不同。

额外提示:始终通过引用其版本号来安装库(例如:conda install pandas=1.2.1)。如果没有版本,上述命令将导出不带版本的依赖项,破坏环境的可重复性。

但是,如果您从environment.yml文件创建了env呢?现在--from-history将导出平台特定的依赖项。然后grep就是您的朋友。您需要grep所有import语句,查看其中哪些是在您的environment.yml文件中定义的,并只使用它们,而无需使用平台特定信息的相同版本。最好开始正确地使用--from-history或手动编辑文件。

额外额外提示:Python和Conda默认工具仍然不能很好地在平台之间创建可重复的安装。如今,我一直成功地使用Poetry来解决这个问题。


我的虚拟环境已经创建好了。我只想安装软件包。所以我采用了这种方法来获取我在本地机器上安装的软件包,手动编辑文件只保留软件包名称。然后使用conda install --file envi.yml来安装软件包。 - Sid
但这不包括通过pip安装的软件包 :/ - Kaoutar

3
使用conda export可以使其他人完全复制你的环境,但前提是他们和你的平台相同。如果要在不同的平台上进行切换,则需要处理依赖于特定平台的包。最简单的方法就是将其删除。请注意,如果您在环境规范中包括具有许多依赖关系的高级软件包,则conda会查找/处理所有这些依赖项。例如,如果您想包含pandas,则不需要在您的环境规范中包含numpy、qt、matplotlib和dateutils。只需列出pandas即可,conda会处理其余部分。因此,您最好手动在文本编辑器中列出最少的环境要求。或者,您也可以使用conda export,但是您可能仍然需要删除大量构建编号(例如=vc17gnad8qt6h)和仅适用于Windows的包(如wincertstore)。

有趣。虽然很糟糕,但我认为这就是答案。 - jason m
@jasonm conda 如何知道包 x 版本 y 是否在您的环境中,因为您特别想要那个版本,还是因为它是您请求包 x 时的当前版本,或者因为它是其他包 z 的依赖项?只有通过记录您实际请求的软件包(如果适用,则为版本),换句话说,“手动在文本编辑器中列出最低限度的环境要求”。您可以要求一项功能,使每个环境记录其 conda createconda install 命令中列出的软件包规范,但是... - nekomatic
这仍然存在疑问,例如如果您安装了某些内容,然后稍后使用 conda update 进行更新,那么您的最低要求是否仍为原始软件包,还是因为您现在需要更高版本而进行了更新? - nekomatic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接