Python虚拟环境
# 写在前面
今天下午有位同学,找我帮忙弄python环境,通过和她之间的交流以及之前帮助过的同学遇到的问题,我总结了一下,90%的同学代码跑不起来就是因为环境问题,我想我应该专门写一篇文章来帮助大家解决这个问题,有句话说得好,“一个项目解决了环境问题,这个项目就已经完成八成了”
关于Python虚拟环境管理,曾经做为一名萌新一直不以为意,心想反正都是我要用的库,全安装在一个环境里,要用直接导入,多好,我不知道大家是不是也是这样想的,反正下午那位同学就是这样想的🤣,可是,后来,就遇到各种不知情况的报错,经常一顿操作猛如虎,一点运行一片红,
因为编程语言的很多库对编程语言本身的版本要求很高,各库之间的版本也要求不同。
再后来,懂得越来越多的我,写的代码越来越多,做的项目以及经验的积累,现在各种环境问题报错,都能花几分钟解决,甚至根本遇不到环境问题,因为什么?因为这些都是我熬过的日日夜夜,日日夜夜一直看着cmd那个黑框框,卸载重新安装下载进度条的加载得出的经验,这一次势必应该做一个总结,不单单是帮助大家,更是对自己经验的实例化,喜欢哪种方式,大家自己选吧。再说一次虚拟环境很重要。
我将会把所有环境有关的知识从头到尾,梳理在下面。
# 一、什么是虚拟环境
想必大家听到“虚拟环境”,脑子里蹦出的一个名词就是“虚拟机”,是的,虚拟机也算是一种虚拟环境
,但是有一个专业性的名词,系统级的环境
我们可以使用虚拟机在我们的操作系统中模拟出多台子电脑(Linux 、Windows、MacOS、甚至是Android),子电脑和主电脑以及子电脑之间都是相互隔离的,互不影响。
虚拟环境主要分为两大部分:
- 系统级
笨重不易用来做开发,啥系统都能虚拟出来,主要用来做实验,启动慢,占用空间大,不易迁移。
- Vmware
- Virtualbox
轻量级,基于Linux内核,虚拟出来的环境也只能是Linux,因为是Linux本身小巧且安全,基本上是目前作为分布式架构的主流方案,也被称之为
容器
- docker
- k8s
- 项目级
- 只针对于某个项目来适配的一个虚拟环境,因为不同项目所用的编程语言不同,我目前所学过的语言,都有对应的虚拟环境方案,这里只列举部分。
- Python
- virtualenv
- Virtualenvwrapper
- conda
- pipenv
- NodeJs
- nvm
- Java
- maven
- Python
- 只针对于某个项目来适配的一个虚拟环境,因为不同项目所用的编程语言不同,我目前所学过的语言,都有对应的虚拟环境方案,这里只列举部分。
系统级和项目级的虚拟环境,都有同一个特点,各子环境与主环境,互不影响。
比如conda管理虚拟环境:
提示
其它管理虚拟环境的工具原理都和conda的一样,这里只是拿conda举个例子。
当然你可以开一个系统级别的虚拟机去单独完成一个项目,可是如果你做了几十个项目呢?你不可能开拿Vmware开几十个虚拟机吧?所以这样是不推荐的,我想大家更喜欢在主环境(你电脑本身的环境)里写代码,也更喜欢一行命令就搭建好一个项目所需要的环境。
提示
系统级别的环境我想大家应该都会,接下来只介绍Python的虚拟环境方案,因为Python又被称为胶水语言,语言本身简单,各种第三方类库很多,只是语言版本前后兼容性没其他语言做的好,可能前个版本的某个类库能用,下一个小版本就不能用了,我猜这也是为什么Python的环境管理工具比其它语言多的原因吧😃
# 二、Python虚拟环境
提示
虚拟环境工具基本上都是第三方开源的,所以需要我们自己进行安装
# 1、使用virtualenv
# 1.1 安装
pip install virtualenv
# 1.2 创建虚拟环境
virtualenv [虚拟环境名称]
virtualenv venv
#如果不想使用系统的包,加上–no-site-packeages参数
virtualenv --no-site-packages 创建路径名
2
3
4
5
# 1.3 激活环境
# linux / macOS:
cd venv
source ./bin/activate
2
# Windows:
cd venv
.\Scripts\activate.bat
2
# 1.4 退出环境
# linux / macOS:
deactivate
# Windows:
.\Scripts\deactivate.bat
# 1.5 删除环境
没有使用virtualenvwrapper前,可以直接删除venv文件夹来删除环境
# 1.6 使用环境
进入环境后,一切操作和正常使用python一样 安装包使用pip install 包
# 2、使用Virtualenvwrapper
Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境,它将所有虚拟环境整合在一个目录下 ,新增,删除,复制,虚拟环境 ,快速切换虚拟环。
# 2.1 安装
# linux / macOS:
pip install --user virtualenvwrapper
# then make Bash load virtualenvwrapper automatically
echo "source virtualenvwrapper.sh" >> ~/.bashrc
source ~/.bashrc
2
3
4
# Windows:
pip install virtualenvwrapper-win
# 2.2 创建虚拟环境
# linux / macOS:
mkvirtualenv --python=python3.6 venv # 这里指定的是python3.6版本
# Windows:
mkvirtualenv --python=python3.6 venv # 这里指定的是python3.6版本
# 2.3 激活环境
workon #列出虚拟环境列表
workon [venv] #切换环境 venv是虚拟环境名字
2
# 2.4 删除环境
rmvirtualenv venv #venv是虚拟环境名字
# 2.5 其他有用指令
pip freeze #查看当前安装库版本
pip install -r requirements.txt #保持部署相同,一键安装所有包
pip freeze > requirements.txt #创建 requirements.txt 文件,其中包含了当前环境中所有包及 各自的版本的简单列表
lsvirtualenv #列举所有的环境
cdvirtualenv #导航到当前激活的虚拟环境的目录中,相当于pushd 目录
cdsitepackages # 和上面的类似,直接进入到 site-packages 目录
lssitepackages #显示 site-packages 目录中的内容
2
3
4
5
6
7
# 3、 使用conda
Conda 是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。 Conda 是为 Python 程序创建的,适用于 Linux,OS X 和Windows,也可以打包和分发其他软件。
conda分为Anaconda和Miniconda。Anaconda是包含一些常用包的版本,Miniconda则是精简版。
Anaconda和Miniconda安装其一即可
Conda是集成的一个环境管理系统,和上面两种环境管理工具不同之处在于,Conda集成了多个版本的软件包及其依赖关系,所以安装包大得多,有专门的exe应用程序来安装。
# 3.1 下载
# 3.2 安装
这里以Anaconda3为例,Miniconda类同
# 3.2.1 找到安装包
# 3.2.2 双击exe安装程序
# 3.2.3 选择Just Me
一路"next",最好选择"Just Me",windows的用户权限管理做的不太友好,如果选择"All User" ,Anaconda有时候则需要管理员权限(root权限)才能执行使用功能,windows用户如果只有一个账户,则那个账户则默认是系统的最高管理者,即为Linux的"root"
# 3.2.4 选择默认安装目录
注意
安装路径千万不能有中文!否则会出错 !
如果想要更换目录,自行更换即可
# 3.2.5 添加到环境变量
环境变量很重要,因为conda基本上都是在cmd命令行下使用,或者你任性可以不勾选,自己手动去配置(/擦汗)
3.2.6 完成安装
装载完成后一路"next"安装完成,这两项可以不用勾选,如果勾选了点击Finish会自动打开Anaconda的使用说明和介绍,不用理会。
# 3.3 测试安装
打开cmd 输入
conda -V
出现conda版本号即为安装成功,我这里是conda 4.10.3
# 3.4 创建虚拟环境
创建不同的python版本,直接写出版本号就好了,还可以同时安装想要的库。
# Python 2.7
conda create -n venv python=2.7 # venv为你自定义创建的环境名
# Python 3.4
conda create -n venv python=3.4 # venv为你自定义创建的环境名
# Python 3.5
conda create -n venv python=3.5 # venv为你自定义创建的环境名
2
3
4
5
6
7
8
# 3.5 查看已有环境
conda env list
# 3.6 激活虚拟环境
# linux / macOS:
source activate venv
# Windows:
activate venv
# 3.7 退出虚拟环境
# linux / macOS:
source deactivate
# Windows:
deactivate
其实可以不管,学会切换就好啦!😆
# 3.8 删除虚拟环境
# 删除一个已有环境
conda remove --name venv --all # venv为环境名
2
# 3.9 导入导出(打包)环境
# 3.9.1 离线
把conda创建的环境打包,然后解压到新的环境里即可直接使用了
# 3.9.1.1 安装工具
conda install -c conda-forge conda-pack
# 3.9.1.2 离线打包
conda pack -n venv # venv为环境名
# 如果报错 命令后面添加--ignore-editable-packages
#比如 conda pack -n venv --ignore-editable-packages
2
3
打包好后会在本文件夹下生成一个[venv].tar.gz的压缩包,这样就基本上就打包好了
# 3.9.1.3 导入离线包
创建一个专门的文件夹,解压到那个文件夹里,进入那个文件夹里的bin目录,然后输入
# Linux
source ./activate
# windows
./activate
2
3
4
就会有一个新的环境了。
# 3.9.2 在线
# 3.9.2.1 导出 .yml 文件
conda env export > venv.yml # venv为导出的文件名以及环境名
提示
注意:如果当前路径已经有了 这个.yml 文件,conda 会重写这个文件
# 3.9.2.2 导入环境
conda env create -f venv.yml # venv为导出的文件名以及环境名
# 3.9.3 Spec List
如果需要在具有 相同操作系统 的计算机之间复制环境,则可以生成 spec list
。
# 3.9.3.1 生成 spec list
文件
conda list --explicit > spec-list.txt
# 3.9.3.2 重现环境
conda create --name python-course --file spec-list.txt
# 3.9.4 Spec List和yml 文件的区别
可以使用 -export
选项生成一个 environment.yml
文件,以在 不同的平台和操作系统之间 复现项目环境。 spec list
文件和 environment.yml
文件之间的区别在于: environment.yml
文件不针对特定操作系统,并且使用YAML格式。 environment.yml
仅列出了软件包名称,由 conda 基于软件包的名称构建环境。 另一个区别是 -export
还包括使用pip安装的软件包,而 spec list
则没有。
# conda其它命令
# 列出系统存在虚拟环境
conda info -e
conda env list
# 查看当前环境下已安装的包
conda list
# 查看某个指定环境的已安装包
conda list -n venv
# 查找package信息
conda search numpy
# 安装package
conda install -n venv numpy
# 如果不用-n指定环境名称,则被安装在当前激活环境
# 也可以通过-c指定通过某个channel安装
# 更新package
conda update -n venv numpy
# 删除package
conda remove -n venv numpy
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 4、使用pipenv
pipenv是Python官方推荐的包管理工具。 它综合了 virtualenv , pip 和 pyenv 三者的功能。能够自动为项目创建和管理虚拟环境。如果你使用过requests库,就一定会爱上这个库,因为是同一个大神出品。 pipenv使用 Pipfile 和 Pipfile.lock 来管理依赖包,并且在使用pipenv添加或删除包时,自动维护 Pipfile 文件,同时生成 Pipfile.lock 来锁定安装包的版本和依赖信息,避免构建错误。相比pip需要手动维护requirements.txt 中的安装包和版本,具有很大的进步。
# 4.1 安装
pip install pipenv
# 4.2 创建虚拟环境
cd myproject
pipenv install # 创建环境
pipenv install requests # 或者直接安装库
2
3
如果不存在pipfile,会生成一个pipfile,并且如果有的库添加会自动编辑该文件,不会我们手动更新requirements.txt文件了。
# 4.3 激活Pipenv Shell
pipenv shell
python --version
2
# 三、IDE内切换环境
提示
这里以conda和pycharm为例,其它环境管理工具和IDE类同
打开pycharm,点击右下角python版本信息,会出现有三个选项,pycharm会自动检测目前电脑中的环境。
- python版本/环境名称
- Interpreter Setting :环境设置,一般用来给当前环境增删包或者删除pycharm检测到的环境
- Add Interpreter : 添加环境,pycharm没有检测到的环境,就可以手动选择环境所在的路径进行添加
提示
这里默认pycharm没有检测到环境
# 1、添加环境
点击Add Interpreter
- New environment 为创建一个新环境,这和在cmd中创建一样
- Existing environment 使用现有的环境
选择现有的环境,点击ok,等待pycharm为我们切换环境,就完成切换了。
提示
如果Existing environment中没有conda环境选择,则打开命令行输入conda activate激活一下环境,在进入pycharm里选择