使用多个 Python 引擎(32 位/64 位和 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 就够了:
These Miniconda installers contain the conda package manager and Python. Once Miniconda is installed, you can use the conda command to install any other packages and create environments, etc. ...
There are two variants of the installer: Miniconda is Python 2 based and Miniconda3 is Python 3 based. Note that the choice of which Miniconda is installed only affects the root environment. Regardless of which version of Miniconda you install, you can still install both Python 2.x and Python 3.x environments.
我建议您使用 Miniconda3 64 位作为根环境。
您以后总是可以安装完整的 Anaconda:
conda install anaconda
注意它可能会降级您之前在活动环境中安装的一些软件包。
我只是想补充 Mike Mullers 的回答,因为我也希望我的 IPython 在 32 位和 64 位之间切换。
设置32位或64位环境后。使用以下命令
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 有一个配置变量 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)。
但是,在整个环境中设置 subdir 可能是更可靠的做法。
YAML 约束
也可以在 YAML 环境定义中使用 subdir 规范。但是,这不太可靠(见下文和评论)。例如,
py37_win32.yaml
name: py37_win32
channels:
- defaults/win-32
dependencies:
- python=3.7
@Bicudo 已经尝试过并确认它有效,但指出它不会对未来的环境更新设置任何特定于环境的限制。此外,@Geeocode 指出默认的子目录仍然可以泄漏,这可能是由于 conda env create
在求解过程中仍然可以访问全局通道配置([=20 没有等效的 --override-channels
标志=]).因此,在环境创建之前和之后仍然设置 subdir 是一个好习惯,例如,
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
(现在在 conda win64 中 - python64 激活环境)
set CONDA_SUBDIR=win-32
conda install python
你会看到
The following packages will be SUPERSEDED by a higher-priority
channel:
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
Proceed ([y]/n)?
只需输入“y”
此设置保存在文件“\anaconda\envs\you env\.condarc”中
我想将 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 就够了:
These Miniconda installers contain the conda package manager and Python. Once Miniconda is installed, you can use the conda command to install any other packages and create environments, etc. ...
There are two variants of the installer: Miniconda is Python 2 based and Miniconda3 is Python 3 based. Note that the choice of which Miniconda is installed only affects the root environment. Regardless of which version of Miniconda you install, you can still install both Python 2.x and Python 3.x environments.
我建议您使用 Miniconda3 64 位作为根环境。
您以后总是可以安装完整的 Anaconda:
conda install anaconda
注意它可能会降级您之前在活动环境中安装的一些软件包。
我只是想补充 Mike Mullers 的回答,因为我也希望我的 IPython 在 32 位和 64 位之间切换。
设置32位或64位环境后。使用以下命令
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 有一个配置变量 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)。
但是,在整个环境中设置 subdir 可能是更可靠的做法。
YAML 约束
也可以在 YAML 环境定义中使用 subdir 规范。但是,这不太可靠(见下文和评论)。例如,
py37_win32.yaml
name: py37_win32
channels:
- defaults/win-32
dependencies:
- python=3.7
@Bicudo 已经尝试过并确认它有效,但指出它不会对未来的环境更新设置任何特定于环境的限制。此外,@Geeocode 指出默认的子目录仍然可以泄漏,这可能是由于 conda env create
在求解过程中仍然可以访问全局通道配置([=20 没有等效的 --override-channels
标志=]).因此,在环境创建之前和之后仍然设置 subdir 是一个好习惯,例如,
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
(现在在 conda win64 中 - python64 激活环境)
set CONDA_SUBDIR=win-32
conda install python
你会看到
The following packages will be SUPERSEDED by a higher-priority channel:
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_3Proceed ([y]/n)?
只需输入“y”
此设置保存在文件“\anaconda\envs\you env\.condarc”中