使用在 windows 上为 linux 创建的 conda env

jas*_*n m 4 python cross-platform conda

我正在将许多环境从 PC 迁移到 linux。

在 Windows 上我运行:

C:\foo> conda env export > environment.yml
Run Code Online (Sandbox Code Playgroud)

然后,在 linux 上,我运行:

$ conda env create -f environment.yml
Run Code Online (Sandbox Code Playgroud)

但我收到如下错误:

ResolvePackageNotFound: 
  - icc_rt=2017.0.4
  - vc=14
  - vs2015_runtime=14.0.25123
  - wincertstore=0.2
  - qt==5.9.5=vc14he4a7d60_0
Run Code Online (Sandbox Code Playgroud)

必须(我假设)是一个已解决的问题。

在这个话题上比我更聪明的人请让我知道他们会怎么做?

谢谢!

nev*_*ves 8

导出环境时,请使用选项 --from-history。它只会导出您明确安装的库,而不是依赖项:

conda env export --from-history > environment.yml
Run Code Online (Sandbox Code Playgroud)

不会导出特定于平台的信息。它会防止很多头痛。

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

Conda 和 Pip 并不是很好地在另一台机器上完美地重新创建环境,因为它们没有记录依赖项的所有依赖项。通常你不会遇到麻烦,但是如果遇到了麻烦,就很难发现依赖项的依赖项是一个略有不同的版本。

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

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


Jam*_*mes 3

是和不是。使用conda export将使其他人能够准确地复制您的环境。这隐含地假设您位于同一平台上。

不幸的是,在交换平台时,您需要处理依赖于平台的包。最简单的方法就是删除它们。请记住,如果您包含具有大量依赖项的高级包,则所有这些依赖项都将由 conda 查找/处理。

例如,如果您想包含 pandas,则不需要在环境规范中包含 numpy、qt、matplotlib 和 dateutils。只需列出 pandas 就足够了,conda 会处理其余的事情。

通过这种方式,您可能最好在文本编辑器中手动列出最低限度的环境要求。

或者,您可以使用conda export,但您可能仍然需要删除大量内部版本号(即=vc17gnad8qt6h)和仅限 Windows 的软件包(如 wincertstore)。