Fork me on GitHub

如何管理多个Python环境

python

这是一篇Python环境管理教程

在刚入门Python的时候,踩过无数的坑。仍然记得当时是为了做人脸检测的毕业设计,需要为Tensorflow搭建运行环境,2017年初,在Windows平台上,Tensorflow刚开始支持python3不久,而不少教程的运行环境都是基于Linux的python 2.7,很多名校DL的课程也是如此。博主辗转于操作系统以及python的各种版本之间,不胜其烦,心态几近崩溃。也是从那时开始使用OneNote,记录自己的每次操作,在不断试错之后,终于发现一点门道,但缺乏系统性。偶然在Medium上看到一篇博文,总结的很好。有鉴于此,此片博文旨在为为Python版本管理发愁的小伙伴提供帮助。

为什么需要管理Python版本,只要最新不行吗?

当你兴致勃勃地入坑了Python,想要在自己的领域里一展拳脚,于是你安装了Python的最新版本,无论是爬虫、ML、DL,还是GUI、Web前后端,都有很多资源都可利用,可是别人的程序就是在自己的电脑无法运行。仔细纠错终于发现包,python,框架,应用无法兼容,真是让人头大,于是你来到这里。

选择适合自己的Conda

1.安装

对于个人开发者,有两种选择:

这两种工具在安装完成时都会为我们提供:

  • Conda —包与环境管理系统。
  • root(base)environment —默认Python环境。

不同点在于:

  • Miniconda只需要400MB存储空间,包含一些基础的扩展包。
  • Anaconda需要4GB存储空间,在默认python环境中安装超过150个扩展包。此外还提供Anaconda Navigator的用户界面用以管理各扩展包和环境。

2. Python版本与环境

在下载安装时可以选择包含某一版本Python的Anaconda,也可以下载最新版本的Anaconda或者Miniconda,再创建自己所需的Python环境,它与默认的环境完全不会冲突,而且新创建的各种版本的Python环境也不会冲突,它们是完全分隔的。

在开始菜单中找到Anaconda Prompt,打开后,此时的一切操作都是在默认环境(base/root environment)中进行。

查看当前python版本:

1
2
3
python --version

Python 3.6.3 :: Anaconda custom (64-bit)

Anaconda目录结构

打开Anaconda安装目录(博主的安装路径是:D:\Anaconda3),可以找到以下文件:

  • \pkg 包括一些以压缩格式和未压缩格式存储的缓存包。
  • \env 以独立的文件保存各个Python环境,不包括默认Python环境。

假设我们已经额外创建了某一版本的Python环境,介绍一些位于\envs\environmentnames目录下比较重要的可执行文件和目录:

  • \python.exe 在命令行中应用中使用,如python.exe exampleapp.py,在运行的时候,会弹出一个黑色的控制台窗口,也叫命令行窗口、DOS/CMD窗口。

  • pythonw.exe用来执行纯图形界面程序,是无窗口的Python可执行程序,在程序运行时,没有窗口,代码在后台执行。如pythonw.exe exampleapp.pwy

  • \Scripts\activae.exe用来激活某一Python环境。

管理环境:GUI 还是Command line(Terminal)

偏好Anaconda的小伙伴可以使用Anaconda Navigator,使用Miniconda的就只能通过命令行来管理环境了。下面重点介绍如何通过命令行来管理Python环境。建议阅读官方文档 Conda cheat sheet,包含了下面即将介绍的各条命令。

添加一个名为MyNewEnv新的环境,以python3.4为例

1
conda create --name MyNewEnv python=3.4

虽然此时我们添加了python3.4的环境,但是此环境的Python版本是随时可以改变的。在关于管理包的部分中会展示如何修改python版本。

1. 激活/退出环境

如前所述,进入Anaconda Prompt后,base environment默认是激活的。当已经创建了MyNewEnv环境之后,以激活MyNewEnv为例

  • Windows
1
activate MyNewEnv
  • Linux 或者Mac OS X
1
source activate MyNewEnv

退出当前环境

  • Windows
1
deactivate

Linux 或者Mac OS X

1
source deactivate

查看所有环境

1
conda env list

2. 查看Conda版本

1
conda --version

3. 查看conda详细信息

包含:

  • conda版本
  • 操作系统,如Win-64
  • python版本
  • 环境目录
  • 渠道地址(下节介绍,可以看到channel URL的前四行都是来源于清华镜像,之后才是Anaconda默认的渠道)
  • 用户配置文件路径(C:\Users\jc.condarc,文件内包含渠道地址-channel url)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
(base) C:\Users\jc>conda info
active environment : base
active env location : D:\Users\jc\Anaconda3
shell level : 1
user config file : C:\Users\jc\.condarc
populated config files : C:\Users\jc\.condarc
conda version : 4.5.11
conda-build version : 3.0.27
python version : 3.6.3.final.0
base environment : D:\Users\jc\Anaconda3 (writable)
channel URLs : https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/noarch
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/win-64
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/noarch
https://repo.anaconda.com/pkgs/main/win-64
https://repo.anaconda.com/pkgs/main/noarch
https://repo.anaconda.com/pkgs/free/win-64
https://repo.anaconda.com/pkgs/free/noarch
https://repo.anaconda.com/pkgs/r/win-64
https://repo.anaconda.com/pkgs/r/noarch
https://repo.anaconda.com/pkgs/pro/win-64
https://repo.anaconda.com/pkgs/pro/noarch
https://repo.anaconda.com/pkgs/msys2/win-64
https://repo.anaconda.com/pkgs/msys2/noarch
package cache : D:\Users\jc\Anaconda3\pkgs
C:\Users\jc\AppData\Local\conda\conda\pkgs
envs directories : D:\Users\jc\Anaconda3\envs
C:\Users\jc\AppData\Local\conda\conda\envs
C:\Users\jc\.conda\envs
platform : win-64
user-agent : conda/4.5.11 requests/2.18.4 CPython/3.6.3 Windows/10 Windows/10.0.17134
administrator : False
netrc file : None
offline mode : False

管理包

1. 获取包的渠道

可以把渠道理解为一个个的仓库,各种包有组织地堆积在仓库中,每个仓库可能有相同的包,也有不同的包。每个渠道都有各自的优先级,优先级越高,安装包时越先查找。当使用conda install命令时,首先会在默认渠道内寻找包的信息,但是有些渠道用国内的网络很难获取(可能跟Anaconda服务器有关),而有些包并不在默认的渠道内。解决这2个问题也很简单:清华镜像站。

TUNA 提供了Anaconda的镜像,打开Anaconda Prompt运行以下命令

1
2
3
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes

如此大多数包都可以轻易下载安装,对于不在镜像渠道内的包,直接使用pip进行安装

1. 搜索,安装和移除包

在当前Python环境下(默认环境,或者使用activate命令激活,由用户自己添加的环境),列出所有已安装包,包括每个包的名称,版本以及通道来源信息。

1
2
3
4
5
6
7
8
9
10
11
(base) C:\Users>conda list
# packages in environment at D:\Users\jc\Anaconda3:
#
# Name Version Build Channel
_ipyw_jlab_nb_ext_conf 0.1.0 py36he6757f0_0 defaults
absl-py 0.2.2 py36_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
alabaster 0.7.10 py36hcd07829_0 defaults
anaconda custom py36_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
anaconda-client 1.6.14 py36_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
anaconda-navigator 1.9.2 py36_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
anaconda-project 0.8.0 py36h8b3bf89_0 defaults

搜索某个包的所有版本

1
2
3
4
5
6
7
8
9
10
(base) C:\Users>conda search -f seaborn
Loading channels: done
# Name Version Build Channel
seaborn 0.5.0 np19py27_0 anaconda/pkgs/free
seaborn 0.5.0 np19py27_0 pkgs/free

...

seaborn 0.9.0 py37_0 anaconda/pkgs/main
seaborn 0.9.0 py37_0 pkgs/main

安装最新版本的包,以seaborn为例

1
conda install seaborn

指定某个版本进行安装

1
conda install seaborn=0.7.0

更新所有包

1
conda update

更新某个包

1
conda update seaborn

移除包

1
conda remove seaborn

3. 更改Python版本

首先,先看看Python都有哪些版本

1
2
3
4
5
6
7
8
9
10
11
12
(base) C:\Users>conda search -f python
Loading channels: done
# Name Version Build Channel
python 2.6.8 5 anaconda/pkgs/free
python 2.6.8 5 pkgs/free

...

python 3.7.1 h33f27b4_3 anaconda/pkgs/main
python 3.7.1 h33f27b4_3 pkgs/main
python 3.7.1 h33f27b4_4 anaconda/pkgs/main
python 3.7.1 h33f27b4_4 pkgs/main

在当前环境下安装Python3.4.2版本,替换掉现有版本(不管现有的是哪个版本)

1
conda install python=3.4.2

在当前环境下更新到最新版本

1
conda update python

4. 什么时候使用pip

如前所述,使用conda可以方便快捷地实现大多数功能,但是对于不在conda所管理的渠道内的包,就要使用pip进行安装(看来任何东西都是尺有所短寸有所长)。

相关资源推荐(需翻墙)

有关服务器和分布式的入门:

A Beginner-Friendly Introduction to Containers, VMs and Docker

What is Docker and How to Use it With Python (Tutorial)

参考资料

Why you need Python environments and how to manage them with Conda