使用多个Python引擎(32Bit/64bit和2.7/3.5)

rmf*_*rmf 48 python python-2.7 python-3.x anaconda conda

我想将Python用于科学应用程序,经过一些研究决定我将使用Anaconda,因为它捆绑了大量的软件包并conda install通过cmd 添加新的模块很容易.

我更喜欢使用64位版本以获得更好的RAM使用和效率,但也需要32位版本,因为有些库是32位.同样,我更喜欢使用Python 3.5,因为这是未来和事情的发展方向.但是大量的库仍然是2.7,这意味着我需要两者.

我必须安装4个版本的Anaconda(64bit 2.7,64bit 3.5,32bit 2.7,64bit 3.5).每个版本大约380MB.我的目标是使用Jupyter笔记本和Spyder作为IDE.我必须在需要时在版本之间切换.我有相互矛盾的库,路径问题和各种奇怪的问题.

所以,我打算从头开始做一个干净的安装.我想知道是否有更明智的方法来处理这个问题.如果重要的话,我现在使用Windows 7 64位.

Mik*_*ler 74

确保设置正确的环境变量(https://github.com/conda/conda/issues/1744)

为32位Python 2.7创建一个新环境:

set CONDA_FORCE_32BIT=1
conda create -n py27_32 python=2.7
Run Code Online (Sandbox Code Playgroud)

激活它:

set CONDA_FORCE_32BIT=1
activate py27_32
Run Code Online (Sandbox Code Playgroud)

停用它:

deactivate py27_32
Run Code Online (Sandbox Code Playgroud)

为64位Python 3.5创建一个:

set CONDA_FORCE_32BIT=
conda create -n py35_64 python=3.5
Run Code Online (Sandbox Code Playgroud)

激活它:

set CONDA_FORCE_32BIT=
activate py35_64
Run Code Online (Sandbox Code Playgroud)

最好的方法是在批处理文件中编写激活命令,这样您只需键入一个命令,就不会忘记设置正确的32/64位标志.

UPDATE

您无需为此安装完整的Anaconda分发版.Miniconda足够了:

这些Miniconda安装程序包含conda包管理器和Python.安装Miniconda后,您可以使用conda命令安装任何其他软件包并创建环境等....

安装程序有两种变体:Miniconda基于Python 2,Miniconda3基于Python 3.请注意,选择安装哪个Miniconda只会影响根环境.无论您安装哪种版本的Miniconda,您仍然可以安装Python 2.x和Python 3.x环境.

我建议你使用Miniconda3 64位作为根环境.

您可以随后安装完整的Anaconda:

conda install anaconda
Run Code Online (Sandbox Code Playgroud)

请注意,它可能会降低您在活动环境中的某些以前安装的软件包.

  • 似乎CONDA_FORCE_32BIT正在消失,目前这并不容易实现:https://github.com/conda/conda/issues/1744 (2认同)

mer*_*erv 21

设置子目录约束

Conda 有一个配置变量subdir,可用于将包搜索限制为平台(例如,win-32)。我认为最简单的过程是创建空的 env,将其设置为subdir,然后继续进行(受限)安装。例如,

win-32,Python 2.7

conda create -n py27_32
conda activate py27_32
conda config --env --set subdir win-32
conda install python=2.7
Run Code Online (Sandbox Code Playgroud)

win-64,Python 3.7

conda create -n py37_64
conda activate py37_64
conda config --env --set subdir win-64
conda install python=3.7
Run Code Online (Sandbox Code Playgroud)

或者,例如,如果您需要从 YAML 文件创建环境,但想要一个win-32平台,则可以使用CONDA_SUBDIR环境变量:

set CONDA_SUBDIR=win-32
conda env create -f env.yaml -n my_env_32
set CONDA_SUBDIR=
conda activate my_env_32
conda config --env --set subdir win-32
Run Code Online (Sandbox Code Playgroud)

这个过程的好处是现在每当激活 env 时都会设置变量,因此将来对 env 的更改将保留在指定的子目录中。


临时约束

也可以在--channel|-c参数中指定平台:

conda install -c defaults/win-32 --override-channels python=3.7
Run Code Online (Sandbox Code Playgroud)

这里--override-channels需要确保仅使用提供的频道和子目录 ( win-32 )。

但是,在整个 env 上设置subdir可能是更可靠的做法。


YAML 约束

也可以在 YAML 环境定义中使用subdir规范。然而,这不太可靠(见下文和评论)。例如,

py37_win32.yaml

name: py37_win32
channels:
 - defaults/win-32
dependencies:
 - python=3.7
Run Code Online (Sandbox Code Playgroud)

@Bicudo 已尝试此操作并确认其有效,但指出它不会对环境的未来更新设置任何特定于环境的约束。此外,@Geeocode 指出默认子目录仍然可能泄漏,这可能是由于conda env create在求解过程中仍然可以访问全局通道配置(没有等效的--override-channels标志conda env create)。因此,在环境创建之前和之后仍然设置子目录是一个很好的做法,例如,

set CONDA_SUBDIR=win-32
conda env create -f py37_win32.yaml
set CONDA_SUBDIR=
conda activate py37_win32
conda config --env --set subdir win-32
Run Code Online (Sandbox Code Playgroud)

或者,从 Conda v4.9 开始,还可以将环境变量指定为 YAML 的一部分。也就是说,可以CONDA_SUBDIR在环境创建时有效地定义环境的价值:

py37_win32.yaml

name: py37_win32
channels:
 - defaults/win-32
dependencies:
 - python=3.7
variables:
  CONDA_SUBDIR: win-32
Run Code Online (Sandbox Code Playgroud)