繁体   English   中英

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

[英]Using multiple Python engines (32Bit/64bit and 2.7/3.5)

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

我更喜欢使用 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 位。

确保设置正确的环境变量( 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

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

更新

您不需要为此安装完整的 Anaconda 发行版。 Miniconda就足够了:

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

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

我建议您使用 Miniconda3 64 位作为根环境。

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

conda install anaconda

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

设置子目录约束

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

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 )。

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


YAML 约束

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

py37_win32.yaml

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

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

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

我只是想补充一下 Mike Mullers 的回答,因为我还希望我的 IPython 在 32 位和 64 位之间切换。

设置好32bit或64bit环境后。 使用以下命令

pip install ipykernel

在这个环境上安装 ipykernel。 然后分配给它:

python -m ipykernel install --user --name myenv --display-name "Python (myenv)"

这里 myenv 是新环境的名称。 有关切换内核的更多详细信息,请参阅此页面 - http://ipython.readthedocs.io/en/stable/install/kernel_install.html

(现在在 conda win64 - python64 activate env)

set CONDA_SUBDIR=win-32
conda install python

你会看见

以下软件包将被更高优先级的频道取代:

ca-certificates anaconda/pkgs/main/win-64::ca-certifi~ --> anaconda/pkgs/main/win-32::ca-certificates-2021.7.5-h9f7ea03_1
openssl anaconda/pkgs/main/win-64::openssl-1.~--> anaconda/pkgs/main/win-32::openssl-1.1.1k-hc431981_0 python
anaconda/pkgs/main/win-64::python-3.9~--> anaconda/pkgs/main/win-32::python-3.9.5-h53c7b84_3

继续 ([y]/n)?

只需输入“y”

此设置保存在文件“\\anaconda\\envs\\ you env \\ .condarc”中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM