python环境管理工具介绍
# 什么是conda
Conda是Python中用于管理包和虚拟环境的一大利器。 使用Conda可以非常便利的使用数据科学相关的包,Conda可以帮助我们创建虚拟环境,从而方便的应用于多个项目中
# 安装Conda
Anaconda实际上是一个软件的发行版,附带了Conda、python和150多个科学软件包及其相关的包。 Anaconda可以在Windows,MacOS以及Linux下进行安装,下载地址:https://www.anaconda.com/download/ ,国内下载镜像:https://mirrors.tuna.tsinghua.edu.cn/anaconda/ 。 Anaconda是一个本身很大(大约500M),因为它附带了Python中最常见的数据科学包。如果您不需要所有的软件包,或者需要节省带宽或存储空间,那么也有Miniconda (opens new window),一个只包含conda和python的发行版。
安装完毕后,将Anaconda安装路径添加到系统PATH变量中:
PATH=${ANACODA_HOME}:${ANACODA_HOME}/Scripts:$PATH
**注意:**如果在安装Anaconda之前已经安装过Python并且已经到PATH变量中,最好是将之前安装的Python从环境变量中删除,避免与Anaconda中python混淆。
在命令行中执行命令:python,如果在进入的Python交互式环境中显示有Anaconda信息,则表明已经安装完毕,如下所示:
Python 3.8.8 (default, Apr 13 2021, 15:08:03) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Warning:
This Python interpreter is in a conda environment, but the environment has
not been activated. Libraries may fail to load. To activate this environment
please see https://conda.io/activation
Type "help", "copyright", "credits" or "license" for more information.
>>>
2
3
4
5
6
7
8
9
# 虚拟环境管理
1.查看当前所有的虚拟环境列表
执行如下命令列出全部环境:
conda env list
# conda environments:
#
base * D:\ProgramFiles\Anaconda3
myenv D:\ProgramFiles\Anaconda3\envs\myenv
2
3
4
5
此时,*号所在的行表示是当前所在的环境。
2.创建虚拟环境
conda create -n env_name list_of_packages
其中,-n后的参数env_name表示环境名称,接着可以跟着0个或多个包名称。
示例:创建一个名称为myenv的环境,同时在该环境中安装一个numpy包
conda create -n myenv numpy
当然,也可以只创建环境而不用安装包:conda create -n myenv
此外,在创建环境时,我们可以指定Python的版本,例如:conda create -n myenv python=2.7
3.进入虚拟环境
conda activate myenv
执行上述命令之后,就进入到名称为myenv的虚拟环境中了。
进入到虚拟环境之后,就可以执行安装模块,查看模块等操作了,如:conda list
4.离开虚拟环境
想要离开当前环境时,则只需要执行如下命令即可:
conda deactivate
5.删除虚拟环境
当某个环境我们不再需要时,可以直接执行如下命令来删除该环境:
conda env remove -n env_name
# 模块管理
Conda安装完成后,自动处于默认的conda虚拟环境中,此时可以使用如下命令查看在当前环境下得模块列表:
conda list
当然,也可以进入到某个指定的虚拟环境中后再执行包管理操作。
1.安装包
如下安装numpy模块:
conda install numpy
除了每次安装一个包外,我们还可以一次性安装多个包,例如:
conda install numpy pandas
此外,我们还可以安装某个指定版本的包:
conda install numpy=1.10
**说明:**使用conda安装指定包时,conda可以自动处理相关的包依赖。
2.删除某个包
conda remove package_name
3.升级某个包
conda upgrade package_name
4.升级全部包
conda upgrade --all
5.查看包列表
conda list
6.模糊查询包
conda search 'keywords'
还可以将环境中用到的包列表导出到文件中,然后将该文件包含在代码中,这允许其他人轻松加载代码的所有依赖项,这与pip freeze>requirements.txt
具有类似的功能。
# 何时使用Conda
回到问题本源,什么时候需要使用Conda呢?
如果在项目开发和部署过程中遇到如下场景,都可以考虑使用Conda(以依赖numpy模块为例说明):
1.在同一台机器上需要同时安装两个版本的numpy,可以通过Conda为每个版本的numpy创建一个虚拟环境,然后在对应环境进行开发或部署。
2.在同一台机器上有多个项目运行,但是可能有一些项目需要用Python3运行,同时另外一些项目需要用Python2运行,同时安装这两个版本的Python可能会导致很多混乱和错误。因此,最好是有单独的虚拟环境来管理和使用,这也可以通过Conda来解决。
**总结为一句话:**在需要对Python环境或模块版本进行隔离的时候都可以使用Conda。
# Miniconda概述
Miniconda是什么?
要解释Miniconda是什么,先要弄清楚什么是Anaconda (opens new window),它们之间的关系是什么?
而要知道Anaconda是什么,最先要明白的是搞清楚什么是Conda,参考:Conda简单教程 (opens new window)。
一言以蔽之,Conda是Python中用于管理依赖包和虚拟环境的工具,Anaconda是一个带有Conda工具的软件包(附带了Conda、python和150多个科学软件包及其相关的包),而Miniconda是一个Anaconda的轻量级替代,默认只包含了Python和Conda。
也就是说,安装了Miniconda,就可以直接使用Python和Conda了。
为什么要使用Miniconda呢?不使用Miniconda难道不可以吗?
当然可以不用Miniconda,没有Miniconda也不妨碍使用Python,实际上没有Minicoda在Python中也是可以实现依赖包和虚拟环境管理的。
Python自带的包管理工具为pip,虚拟环境管理可以使用virtualenv(需要单独安装:pip install virtualenv
),但是在这么一些情况下使用Miniconda能够比较方便的解决问题。
场景1:系统本身已经存在了Python2(大多数Linux系统都会自带),但是应用程序运行环境需要Python3,此时使用Miniconda可以在不直接升级系统本身自带的Python2的情况下使用Python3。当然直接升级系统本身自带的Python2为Python3也是可以的,但是存在一定的危险性,这样做可能会破坏某些系统工具的运行环境。比如在产线环境需要临时使用Python3环境,是不太可能允许直接去升级系统自带的Python2的。关于升级Python2到Python3可以参考:Python2升级到Python3 (opens new window)。
场景2:系统需要存在多个环境,便于在Python2和Python3之间来回切换,使用Miniconda能很好地解决这个需求。
场景3:系统本身不带Python,手动安装Python可能比较慢,直接安装Miniconda即可使用Python环境。
# 安装Miniconda
Miniconda可以从国内镜像站下载,比如:清华大学开源软件镜像站 (opens new window)。 至于需要下载哪个版本的Miniconda,需要根据使用Python版本的需求而定,详见:Miniconda (opens new window),而Anaconda支持的Python版本信息则详见传送门 (opens new window)。
# 系统本身的Python版本为:3.6.9
$ python -V
Python 3.6.9
#官网地址
https://docs.anaconda.com/miniconda/
$ wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda-3.9.1-Linux-x86_64.sh
$ bash Miniconda-3.9.1-Linux-x86_64.sh
#指定程序目录
bash Miniconda-3.9.1-Linux-x86_64.sh -b -u -p /usr/local/miniconda3
2
3
4
5
6
7
8
9
根据提示信息一路安装完毕,最后会将miniconda添加到环境变量PATH中。
# added by Miniconda 3.9.1 installer
export PATH="/home/zhangsan/miniconda/bin:$PATH"
2
说明: 在不同的Linux发行版上安装Miniconda后,添加conda到PATH变量的方式可能有所不同,但通常都是在~/.bashrc
文件中实现的。
安装完毕之后重新登陆系统,查看conda信息:
$ conda info
Current conda install:
platform : linux-64
conda version : 3.9.1
conda-build version : not installed
python version : 2.7.9.final.0
requests version : 2.25.0
root environment : /home/zhangsan/miniconda (writable)
default environment : /home/zhangsan/miniconda
envs directories : /home/zhangsan/miniconda/envs
package cache : /home/zhangsan/miniconda/pkgs
channel URLs : http://repo.continuum.io/pkgs/free/linux-64/
http://repo.continuum.io/pkgs/free/noarch/
http://repo.continuum.io/pkgs/pro/linux-64/
http://repo.continuum.io/pkgs/pro/noarch/
config file : None
is foreign system : False
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
查看Python信息:
# 注意:此时查看Python版本信息时已经是Conda自带的默认Python版本了
$ python -V
Python 2.7.9 :: Continuum Analytics, Inc.
2
3
执行conda -h
可以查看详细用法。
说明:
当把conda添加到PATH变量时,登录系统后会进入到conda中激活的环境中,此时执行python -V
查看到的版本信息是conda环境中的Python。如果不再使用conda了,可以将conda从PATH变量中移除即可,如下所示:
$ cat .bashrc
# added by Miniconda 3.9.1 installer
# export PATH="/home/zhangsan/miniconda/bin:$PATH"
2
3
# 使用Miniconda
# 添加镜像源
安装完Miniconda之后首先要做的就是添加镜像源,便于快速下载相应模块包。
修改~/.condarc
文件内容如下:
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
- https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
- https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
- https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/
- https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/
- https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/
- https://mirrors.ustc.edu.cn/anaconda/cloud/
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
ustc: http://mirrors.ustc.edu.cn/anaconda/pkgs/free/
alibaba : https://mirrors.aliyun.com/pypi/simple/
ssl_verify: true
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
修改完毕并保存文件内容之后执行conda clean -i
清除索引缓存,保证用的是镜像站提供的索引。
# 管理虚拟环境
# 查看环境信息,当前环境会通过一个星号 (*) 标识
$ conda env list
# conda environments:
#
root * /home/zhangsan/miniconda
2
3
4
5
如上,默认的环境名称为root。
创建虚拟环境:
# 新建一个基于Python 3.6的环境,名称为myenv
$ conda create -n myenv python=3.6.2
$ conda env list
# conda environments:
#
myenv /home/zhangsan/miniconda/envs/myenv
root * /home/zhangsan/miniconda
2
3
4
5
6
7
创建完新环境之后查看环境列表,默认还是root
环境。
选择虚拟环境:
$ source activate myenv
discarding /home/zhangsan/miniconda/bin from PATH
prepending /home/zhangsan/miniconda/envs/myenv/bin to PATH
# 在指定环境中查看Python版本时正是创建环境时指定的版本
$ python -V
Python 3.6.2 :: Continuum Analytics, Inc.
2
3
4
5
6
7
退出虚拟环境:
# 退出当前所处的虚拟环境
$ source deactivate
discarding /home/zhangsan/miniconda/envs/myenv/bin from PATH
# 再次查看Python版本时就是conda默认root环境的Python版本
$ python -V
Python 2.7.9 :: Continuum Analytics, Inc.
2
3
4
5
6
7
删除虚拟环境:
# 删除指定名称的虚拟环境
$ conda env remove -n myenv
$ conda env list
# conda environments:
#
root * /home/zhangsan/miniconda
2
3
4
5
6
# 管理软件包
# 查看在当前所在虚拟环境中已经安装的包
$ conda list
# 在当前所在的虚拟环境中安装软件包
$ conda install <package_name>
# 在指定虚拟环境中安装包
$ conda install --name <env_name> <package_name>
# 卸载当前所在虚拟环境下的指定包
$ conda remove <package_name>
# 卸载指定虚拟环境下的指定包
$ conda remove --name <env_name> <package_name>
# 升级当前所在虚拟环境下的指定包
$ conda update <package_name>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
说明:
在conda管理的虚拟环境中,软件包的管理除了可以使用conda实现,同样还可以直接使用pip(使用pip安装的软件包在对应虚拟环境目录中,与其他虚拟环境是隔离开的,互不影响)。
但是使用pip安装的软件包后,在使用conda list
查看时会提示Could not extract name and version
,例如:
# 使用conda无法正常安装selenium,使用pip安装selenium后执行`conda list`显示如下信息
(myenv)[root@VM-24-10-centos ~]# conda list
# packages in environment at /root/miniconda/envs/myenv:
#
Could not extract name and version from: 'Package Version'
Could not extract name and version from: '---------- ---------'
Could not extract name and version from: 'certifi 2016.2.28'
Could not extract name and version from: 'pip 21.3.1'
Could not extract name and version from: 'selenium 3.141.0'
Could not extract name and version from: 'setuptools 36.4.0'
Could not extract name and version from: 'urllib3 1.26.12'
Could not extract name and version from: 'wheel 0.29.0'
certifi 2016.2.28 py36_0 defaults
openssl 1.0.2l 0 defaults
pip 9.0.1 py36_1 defaults
python 3.6.2 0 defaults
readline 6.2 2 <unknown>
setuptools 36.4.0 py36_1 defaults
sqlite 3.13.0 0 defaults
tk 8.5.18 0 defaults
wheel 0.29.0 py36_0 defaults
xz 5.2.3 0 defaults
zlib 1.2.11 0 defaults
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 离线安装软件包
#查看软件版本
/home/zhangsan/miniconda/envs/myenv/bin/python -m pip list | grep redis
#卸载软件包
/home/zhangsan/miniconda/envs/myenv/bin/python -m pip uninstall redis
#安装软件包
/home/zhangsan/miniconda/envs/myenv/bin/python -m pip install redis-3.5.3.tar.gz
#python源代码依赖包下载地址
https://pypi.org/project
#解压依赖包安装方式
cd redis-3.5.3
/home/zhangsan/miniconda/envs/myenv/bin/python setup.py install
2
3
4
5
6
7
8
9
10
11
# linux服务器安装python项目
打包Python项目的依赖
pip3 freeze > requirements.txt
2
安装依赖
pip3 install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com -r requirements.txt
2
运行程序
python3 main.py