从Windows到Linux,Conda(Python)虚拟环境不可移植

时间:2016-08-23 15:46:11

标签: python linux virtualenv anaconda conda

在我的Windows 10计算机上,我使用以下命令创建了一个虚拟环境:

>conda env export > environment.yml 

我尝试使用Windows系统上的yml文件重新创建虚拟环境,但它运行正常。然后我将environment.yml转移到我的Linux机器(Ubuntu 16.04.1),使用相同版本的conda和python,并在终端中运行以下命令:

$ conda env create -f environment.yml

我收到以下错误:

  

使用Anaconda Cloud api网站https://api.anaconda.org
  获取包元数据.......
  解决包装规格:。
  错误:当前linux-64通道中缺少软件包:
     - jpeg 8d vc14_0
     - libpng 1.6.22 vc14_0
     - libtiff 4.0.6 vc14_2
     - mkl 11.3.3 1
     - numpy 1.11.1 py35_1
     - openssl 1.0.2h vc14_0
     - pyqt 4.11.4 py35_7
     - qt 4.8.7 vc14_9
     - tk 8.5.18 vc14_0
     - vs2015_runtime 14.0.25123 0
     - zlib 1.2.8 vc14_3

大多数这些软件包都在conda的linux repo中提供,但具有不同的风格。例如,如果我从包含yml文件中的jpeg包的行中删除vc14_0,那就可以了。 vs2015_runtime包在linux中根本不可用。运行时不会返回任何内容:

conda search vs2015_runtime". 

如何在跨平台工作时以可移植的方式导出我的虚拟环境,以便所有软件包也可以安装在Linux中?

以下是我environment.yml的内容。

2 个答案:

答案 0 :(得分:2)

看起来您正在获取使用Microsoft Visual C / C ++编译器(名称的vc部分)编译的包。 这些软件包不会像您尝试的那样从Linux兼容ABI。只需定位非特定于Windows的软件包。

答案 1 :(得分:0)

导出环境时,请使用 --from-history 选项。

conda env export --from-history > environment.yml

它只会导出您明确安装的库,而不是依赖项:

通常某些依赖项是特定于平台的,例如上面的 Visual Studio 依赖项。此外,默认的 conda env 导出将平台特定信息放入库中。

它可以避免很多麻烦并使您的导出文件多平台。

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