目录

Python虚拟环境

# 写在前面

今天下午有位同学,找我帮忙弄python环境,通过和她之间的交流以及之前帮助过的同学遇到的问题,我总结了一下,90%的同学代码跑不起来就是因为环境问题,我想我应该专门写一篇文章来帮助大家解决这个问题,有句话说得好,“一个项目解决了环境问题,这个项目就已经完成八成了”

关于Python虚拟环境管理,曾经做为一名萌新一直不以为意,心想反正都是我要用的库,全安装在一个环境里,要用直接导入,多好,我不知道大家是不是也是这样想的,反正下午那位同学就是这样想的🤣,可是,后来,就遇到各种不知情况的报错,经常一顿操作猛如虎,一点运行一片红

因为编程语言的很多库对编程语言本身的版本要求很高,各库之间的版本也要求不同。

再后来,懂得越来越多的我,写的代码越来越多,做的项目以及经验的积累,现在各种环境问题报错,都能花几分钟解决,甚至根本遇不到环境问题,因为什么?因为这些都是我熬过的日日夜夜,日日夜夜一直看着cmd那个黑框框,卸载重新安装下载进度条的加载得出的经验,这一次势必应该做一个总结,不单单是帮助大家,更是对自己经验的实例化,喜欢哪种方式,大家自己选吧。再说一次虚拟环境很重要。

我将会把所有环境有关的知识从头到尾,梳理在下面。

# 一、什么是虚拟环境

想必大家听到“虚拟环境”,脑子里蹦出的一个名词就是“虚拟机”,是的,虚拟机也算是一种虚拟环境,但是有一个专业性的名词,系统级的环境

我们可以使用虚拟机在我们的操作系统中模拟出多台子电脑(Linux 、Windows、MacOS、甚至是Android),子电脑和主电脑以及子电脑之间都是相互隔离的,互不影响。

虚拟环境主要分为两大部分:

  1. 系统级
    • 笨重不易用来做开发,啥系统都能虚拟出来,主要用来做实验,启动慢,占用空间大,不易迁移

      1. Vmware
      2. Virtualbox
    • 轻量级,基于Linux内核,虚拟出来的环境也只能是Linux,因为是Linux本身小巧且安全,基本上是目前作为分布式架构的主流方案,也被称之为容器

      1. docker
      2. k8s
  2. 项目级
    • 只针对于某个项目来适配的一个虚拟环境,因为不同项目所用的编程语言不同,我目前所学过的语言,都有对应的虚拟环境方案,这里只列举部分。
      1. Python
        • virtualenv
        • Virtualenvwrapper
        • conda
        • pipenv
      2. NodeJs
        • nvm
      3. Java
        • maven

系统级和项目级的虚拟环境,都有同一个特点,各子环境与主环境,互不影响。

比如conda管理虚拟环境:

无标题

提示

其它管理虚拟环境的工具原理都和conda的一样,这里只是拿conda举个例子。

当然你可以开一个系统级别的虚拟机去单独完成一个项目,可是如果你做了几十个项目呢?你不可能开拿Vmware开几十个虚拟机吧?所以这样是不推荐的,我想大家更喜欢在主环境(你电脑本身的环境)里写代码,也更喜欢一行命令就搭建好一个项目所需要的环境。

提示

系统级别的环境我想大家应该都会,接下来只介绍Python的虚拟环境方案,因为Python又被称为胶水语言,语言本身简单,各种第三方类库很多,只是语言版本前后兼容性没其他语言做的好,可能前个版本的某个类库能用,下一个小版本就不能用了,我猜这也是为什么Python的环境管理工具比其它语言多的原因吧😃

# 二、Python虚拟环境

提示

虚拟环境工具基本上都是第三方开源的,所以需要我们自己进行安装

# 1、使用virtualenv

# 1.1 安装

pip install virtualenv
1

# 1.2 创建虚拟环境

virtualenv [虚拟环境名称] 
virtualenv venv

#如果不想使用系统的包,加上–no-site-packeages参数
virtualenv  --no-site-packages 创建路径名
1
2
3
4
5

# 1.3 激活环境

# linux / macOS:
cd venv
source ./bin/activate
1
2
# Windows:
cd venv
.\Scripts\activate.bat
1
2

# 1.4 退出环境

# linux / macOS:
deactivate
1
# Windows:
.\Scripts\deactivate.bat
1

# 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
1
2
3
4
# Windows:
pip install virtualenvwrapper-win
1

# 2.2 创建虚拟环境

# linux / macOS:
mkvirtualenv --python=python3.6 venv # 这里指定的是python3.6版本
1
# Windows:
mkvirtualenv --python=python3.6 venv # 这里指定的是python3.6版本
1

# 2.3 激活环境

workon #列出虚拟环境列表
workon [venv] #切换环境 venv是虚拟环境名字
1
2

# 2.4 删除环境

rmvirtualenv venv #venv是虚拟环境名字
1

# 2.5 其他有用指令

pip freeze #查看当前安装库版本
pip install -r requirements.txt #保持部署相同,一键安装所有包
pip freeze > requirements.txt  #创建 requirements.txt 文件,其中包含了当前环境中所有包及 各自的版本的简单列表
lsvirtualenv    #列举所有的环境
cdvirtualenv    #导航到当前激活的虚拟环境的目录中,相当于pushd 目录
cdsitepackages   # 和上面的类似,直接进入到 site-packages 目录
lssitepackages     #显示 site-packages 目录中的内容
1
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 找到安装包

image-20220303142529229

# 3.2.2 双击exe安装程序

image-20220303142619214

# 3.2.3 选择Just Me

一路"next",最好选择"Just Me",windows的用户权限管理做的不太友好,如果选择"All User" ,Anaconda有时候则需要管理员权限(root权限)才能执行使用功能,windows用户如果只有一个账户,则那个账户则默认是系统的最高管理者,即为Linux的"root"

image-20220303142732772

# 3.2.4 选择默认安装目录

注意

安装路径千万不能有中文!否则会出错 !

如果想要更换目录,自行更换即可

image-20220303143327536

# 3.2.5 添加到环境变量

环境变量很重要,因为conda基本上都是在cmd命令行下使用,或者你任性可以不勾选,自己手动去配置(/擦汗)

image-20220303143749034

3.2.6 完成安装

装载完成后一路"next"安装完成,这两项可以不用勾选,如果勾选了点击Finish会自动打开Anaconda的使用说明和介绍,不用理会。

image-20220303144325320

# 3.3 测试安装

打开cmd 输入

conda -V
1

出现conda版本号即为安装成功,我这里是conda 4.10.3

image-20220303144735122

# 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为你自定义创建的环境名
1
2
3
4
5
6
7
8

# 3.5 查看已有环境

conda env list
1

# 3.6 激活虚拟环境

# linux / macOS:
source activate venv
1
# Windows:
activate venv
1

# 3.7 退出虚拟环境

# linux / macOS:
source deactivate
1
# Windows:
deactivate
1

其实可以不管,学会切换就好啦!😆

# 3.8 删除虚拟环境

# 删除一个已有环境
conda remove --name venv --all # venv为环境名
1
2

# 3.9 导入导出(打包)环境

# 3.9.1 离线

把conda创建的环境打包,然后解压到新的环境里即可直接使用了

# 3.9.1.1 安装工具
conda install -c conda-forge conda-pack
1
# 3.9.1.2 离线打包
conda pack -n venv  # venv为环境名
# 如果报错 命令后面添加--ignore-editable-packages 
#比如 conda pack -n venv  --ignore-editable-packages
1
2
3

打包好后会在本文件夹下生成一个[venv].tar.gz的压缩包,这样就基本上就打包好了

# 3.9.1.3 导入离线包

创建一个专门的文件夹,解压到那个文件夹里,进入那个文件夹里的bin目录,然后输入

# Linux
source ./activate 
# windows
./activate 
1
2
3
4

就会有一个新的环境了。

# 3.9.2 在线
# 3.9.2.1 导出 .yml 文件
 conda env export > venv.yml # venv为导出的文件名以及环境名
1

提示

注意:如果当前路径已经有了 这个.yml 文件,conda 会重写这个文件

# 3.9.2.2 导入环境
 conda env create -f venv.yml # venv为导出的文件名以及环境名
1
# 3.9.3 Spec List

如果需要在具有 相同操作系统 的计算机之间复制环境,则可以生成 spec list

# 3.9.3.1 生成 spec list 文件
 conda list --explicit > spec-list.txt
1
# 3.9.3.2 重现环境
 conda create  --name python-course --file spec-list.txt
1
# 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
1
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
1

# 4.2 创建虚拟环境

cd myproject
pipenv install # 创建环境
pipenv install requests # 或者直接安装库
1
2
3

如果不存在pipfile,会生成一个pipfile,并且如果有的库添加会自动编辑该文件,不会我们手动更新requirements.txt文件了。

# 4.3 激活Pipenv Shell

pipenv shell
python --version
1
2

# 三、IDE内切换环境

提示

这里以conda和pycharm为例,其它环境管理工具和IDE类同

打开pycharm,点击右下角python版本信息,会出现有三个选项,pycharm会自动检测目前电脑中的环境。

image-20220303175353155

  1. python版本/环境名称
  2. Interpreter Setting :环境设置,一般用来给当前环境增删包或者删除pycharm检测到的环境
  3. Add Interpreter : 添加环境,pycharm没有检测到的环境,就可以手动选择环境所在的路径进行添加

提示

这里默认pycharm没有检测到环境

# 1、添加环境

点击Add Interpreter

image-20220303175807473

  • New environment 为创建一个新环境,这和在cmd中创建一样
  • Existing environment 使用现有的环境

选择现有的环境,点击ok,等待pycharm为我们切换环境,就完成切换了。

提示

如果Existing environment中没有conda环境选择,则打开命令行输入conda activate激活一下环境,在进入pycharm里选择

上次更新: 2023/09/05 17:45:42
最近更新
01
关于我
07-14
02
科学上网
11-15
03
OSS+CDN
09-23
更多文章>
极昼青春
买辣椒也用券