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

新手上路,请多包涵

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

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

我必须安装 4 个版本的 Anaconda(64 位 2.7、64 位 3.5、32 位 2.7、64 位 3.5)。每个版本大约 380MB。我的目标是使用 Jupyter notebook 和 Spyder 作为 IDE。我必须在需要时在版本之间切换。我遇到了库冲突、路径问题和各种奇怪的问题。

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

原文由 mindlessgreen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 591
2 个回答

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

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

 set CONDA_FORCE_32BIT=1
conda create -n py27_32 python=2.7

激活它:

 set CONDA_FORCE_32BIT=1
activate py27_32

停用它:

 deactivate py27_32

为 64 位 Python 3.5 创建一个:

 set CONDA_FORCE_32BIT=
conda create -n py35_64 python=3.5

激活它:

 set CONDA_FORCE_32BIT=
activate py35_64

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

更新

您不需要为此安装完整的 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

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

原文由 Mike Müller 发布,翻译遵循 CC BY-SA 4.0 许可协议

设置子目录约束

Conda 有一个配置变量 subdir ,可用于将包搜索限制到平台(例如, win-32 )。我认为最简单的过程是创建空环境,将其设置为 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

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

或者,如果您需要,例如,从 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

这个过程的好处是,只要激活 env,变量就会始终被设置,因此以后对 env 的更改将保留在指定的子目录中。


临时 约束

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

 conda install -c defaults/win-32 --override-channels python=3.7

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

但是,在整个环境中设置 子目录 可能是一种更可靠的做法。


YAML 约束

也可以在 YAML 环境定义中使用 子目录 规范。但是,这不太可靠(见下文和评论)。例如,

py37_win32.yaml

 name: py37_win32
channels:
 - defaults/win-32
dependencies:
 - python=3.7

@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

或者,从 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

原文由 merv 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题