python3xiaobaike_2020/chapter6/6-10 python3小白课:虚拟环境使用.md
2025-04-20 23:22:14 +08:00

260 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# python3小白课虚拟环境使用
上节课我们安装好了虚拟环境,这节课我们来教会大家基本的使用,关于其他使用命令,日常不常用的,我就不讲解了,讲多了大家也记不住。
接着上节课我们打开了一个cmd窗口对吧目前还是没有任何虚拟环境的。
### 创建虚拟环境
```powershell
mkvirtualenv test
```
回车,就创建好了,你可以使用`workon`查看到生成了一个名为`test`的虚拟环境,并且直接激活进入了该虚拟环境。
![图6-10-1 创建test虚拟环境](assets/6-10-1.jpg)
这里`mkvirtualenv`就是创建新的虚拟环境的命令,你记住`mk`即可,应该是英文单词`make`制造。后面跟随的是空格和虚拟环境的名字,它会在之前的`WORKON_HOME`路径下创建一个以这个名字命名的文件夹,所以你的名字也别太花哨了,文件夹名不支持的字符不要作为名字哦~比如我们这里就是名字为`test`,到资源管理器中查看该路径,确实该文件夹已经创立。
这种命令的写法默认会使用你`当前的系统python的版本`创建一个虚拟环境。
像这种创建方法你可以直接进入到新虚拟环境中,大家可以看到在上图中命令提示符最后一行的最左侧多了`(test)`这样的标识,这就是已进入虚拟环境的标志。在虚拟环境进入后,我们可以输入`python`进入当前虚拟环境版本的`python shell`,也可以使用`python py文件名``pip`命令来使用虚拟环境。这时你若使用`pip install 包名`命令安装的包只会存在于虚拟环境不会安装到系统的python环境这就能让项目的三方包环境非常整洁干净未来你需要看一下这个项目用了哪几个三方包版本号是多少的时候就会极其方便。
> [!note]
>
> 如果你感兴趣可以到虚拟环境的存放目录看一下虚拟环境跟普通已安装好的python有什么区别。
>
> 可以发现其实就是将已安装的python进行虚拟化复制一份文件夹也做了一些优化让它可以作为独立环境运行。
---
### 退出已激活的虚拟环境
> [!question]
>
> 创建好了虚拟环境,怎么退出呢?
```powershell
deactivate
```
`activate`是激活的意思,加上否定前缀就是不激活咯,就是退出虚拟环境了,而`activate`也是一个激活的命令,后面我们会讲到。
![图6-10-2 退出虚拟环境](assets/6-10-2.jpg)
如图,命令提示符最后一行的最左侧恢复了正常。
---
### 激活或切换虚拟环境
如上面的截图例子所示,我们的当前目录在`C:\Users\xueshanlinghu`这个路径下,我们可以切换当前工作目录到你要激活的那个虚拟环境目录下的`Scripts`文件夹下,如`E:\ProgramFiles\virtualpython\test\Scripts`,在这里我们可以运行
```powershell
activate
```
即可激活虚拟环境。
但我一般很少这样操作。还记得我们上节课学习过的可以通过`workon`命令查看当前有多少个虚拟环境吗,它会把所有虚拟环境的名字罗列出来。你如果知道你要进入哪个虚拟环境的名字,可以在任意工作目录下输入命令:
```powershell
workon test
```
![图6-10-3 workon激活虚拟环境test](assets/6-10-3.jpg)
这样我们可以更轻松进行虚拟环境的激活了,`test`这个虚拟环境名你可以换成你的。通常推荐大家这样用。
顺便,我们来看一下`pip list``pip --version`的运行效果:
![图6-10-4 虚拟环境下的pip](assets/6-10-4.jpg)
可以看到,都是单独的。
---
### 删除虚拟环境
> [!question]
>
> 当某虚拟环境不准备再使用了怎么办?
那就删除呗。
你可以到虚拟环境的文件夹将该虚拟环境文件夹直接删除即可。
我个人一般会用命令删除:
```powershell
rmvirtualenv test
```
这样就可以把`test`这个虚拟环境删除了。其实就是前面加了`rm`,应为`remove移除`的意思,很好理解和记忆。
![图6-10-5 删除虚拟环境test](assets/6-10-5.jpg)
---
### 安装其他版本的python的虚拟环境
这里我们的系统环境python是3.8.2版本我们拿安装python2.7.18和python3.6.6版本的虚拟环境为例跟大家做讲解,其他的可以举一反三。
安装包下载我也会在课程中提供给大家这里均为64位的安装包为例
* python3.6.6[https://www.python.org/ftp/python/3.6.6/python-3.6.6-amd64.exe](https://www.python.org/ftp/python/3.6.6/python-3.6.6-amd64.exe)
* python2.7.18[https://www.python.org/ftp/python/2.7.18/python-2.7.18.amd64.msi](https://www.python.org/ftp/python/2.7.18/python-2.7.18.amd64.msi)
#### python3.6.6虚拟环境创建
安装很简单,跟之前学习的差不多,需要注意的是,不要选择添加到环境变量就可以了。
![图6-10-6 python3.6.6安装](assets/6-10-6.jpg)
这里比如我安装在`E:\ProgramFiles\virtualpython\purepython\python3.6.6`目录下。
安装完成后复制一份该文件夹到当前目录下。复制后,就可以到系统程序与功能-卸载或更改程序那里将python3.6.6版本卸载掉了,这样可以让系统不那么乱,更绿色。卸载后,将刚才备份的文件夹重命名跟复制前`python3.6.6`一样。
完成后即可在cmd输入命令创建了例如
```powershell
mkvirtualenv -p "E:\ProgramFiles\virtualpython\purepython\python3.6.6\python.exe" py36
mkvirtualenv --python "E:\ProgramFiles\virtualpython\purepython\python3.6.6\python.exe" py36
```
> [!tip]
>
> 上面两种方法均可以创建,任选一种即可,我个人喜欢第一种。-p参数后面跟上你安装的其他版本python的python.exe解释器的绝对路径如果路径中没有空格可以不加引号如果有需要加上引号我建议你都加上就好了。写完后再写上需要创建的虚拟环境名称即可。
![图6-10-7 创建python3.6.6的虚拟环境](assets/6-10-7.jpg)
你看,成功了!
#### python2.7.18虚拟环境创建
由于安装包是msi的后缀所以稍微跟python3的有一点点小区别。
安装时注意点我就不多说了参考我们之前安装python的时候需要注意的是不要选择添加到环境变量默认就是不选的按默认的就行
![图6-10-8 python2.7.18安装](assets/6-10-8.jpg)
这里我安装到了`E:\ProgramFiles\virtualpython\purepython\python2.7.18`这个文件夹下。复制一下这个文件夹。
接下来这一步很重要,你需要到`C:\Windows\System32`这个目录,搜索`python27.dll`这个文件并拷贝到另一个地方备份。
然后到系统程序与功能-卸载或更改程序那里将python2.7.18版本卸载了,卸载完成后,将刚才复制备份的文件夹修改回`python2.7.18`这个文件夹名。
`python27.dll`这个文件还原到`C:\Windows\System32`这个目录。
这样绿色版的python2.7.18就制作好了。
你可以输入命令来创建一个python2.7的虚拟环境了:
```powershell
mkvirtualenv -p "E:\ProgramFiles\virtualpython\purepython\python2.7.18\python.exe" py27
```
![图6-10-9 创建python2.7.18的虚拟环境](assets/6-10-9.jpg)
可以看到确实使用了python2.7.18的版本。
> [!tip]
>
> 在python2语法中打印输出使用的是`print 要打印的内容`这样的写法而在python3中变成了`print(要打印的内容)`你可以很好地辨别用的是python2还是python3请知悉。
---
### 冻结项目所用的包
之前我们在学习解锁心仪的三方包的时候,学习过可以使用`pip freeze > requirements.txt`命令来冻结所用到的三方包的情况,我们来举个例子。
我们分别在cmd中输入下面的命令
```powershell
workon py36 # 切换py36虚拟环境
pip install requests # 安装requests三方包及相关包
pip list # 查看目前的pip列表
pip freeze > requirements.txt # 冻结目前所用的所有三方包保存到文件
type requirements.txt # cmd中打开文本文件并打印输出所有内容
```
运行结果如下:
```powershell
Microsoft Windows [版本 10.0.18363.778]
(c) 2019 Microsoft Corporation保留所有权利
C:\Users\xueshanlinghu>workon py36
(py36) C:\Users\xueshanlinghu>pip install requests
Collecting requests
Downloading requests-2.23.0-py2.py3-none-any.whl (58 kB)
|████████████████████████████████| 58 kB 363 kB/s
Collecting certifi>=2017.4.17
Using cached certifi-2020.4.5.1-py2.py3-none-any.whl (157 kB)
Collecting chardet<4,>=3.0.2
Using cached chardet-3.0.4-py2.py3-none-any.whl (133 kB)
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1
Using cached urllib3-1.25.9-py2.py3-none-any.whl (126 kB)
Collecting idna<3,>=2.5
Using cached idna-2.9-py2.py3-none-any.whl (58 kB)
Installing collected packages: certifi, chardet, urllib3, idna, requests
Successfully installed certifi-2020.4.5.1 chardet-3.0.4 idna-2.9 requests-2.23.0 urllib3-1.25.9
(py36) C:\Users\xueshanlinghu>pip list
Package Version
---------- ----------
certifi 2020.4.5.1
chardet 3.0.4
idna 2.9
pip 20.0.2
requests 2.23.0
setuptools 46.1.3
urllib3 1.25.9
wheel 0.34.2
(py36) C:\Users\xueshanlinghu>pip freeze > requirements.txt
(py36) C:\Users\xueshanlinghu>type requirements.txt
certifi==2020.4.5.1
chardet==3.0.4
idna==2.9
requests==2.23.0
urllib3==1.25.9
(py36) C:\Users\xueshanlinghu>
```
换一个项目,所用的包不同,则你可以再创建一个新项目的虚拟环境,在里面任意折腾,当不需要时,删除该虚拟环境即可。
我们退出虚拟环境再看一下系统python的`pip list`有没有什么变化,结果如下:
```powershell
(py36) C:\Users\xueshanlinghu>deactivate
C:\Users\xueshanlinghu>pip list
Package Version
--------------------- -------
appdirs 1.4.3
distlib 0.3.0
filelock 3.0.12
pip 20.0.2
setuptools 46.1.3
six 1.14.0
virtualenv 20.0.18
virtualenvwrapper-win 1.2.6
C:\Users\xueshanlinghu>
```
可以看到,只有之前安装`virtualenv`的一些相关的包,清清爽爽,干干净净。
### 单词释义
| 单词 | 释义 |
| ------------ | -------------------------------------------- |
| mkvirtualenv | mkmake创建、制造的简写virtualenv虚拟环境 |
| deactivate | 让...停止工作,就是退出激活的意思 |
| activate | 激活 |
| rmvirtualenv | rmremove移除的简写virtualenv虚拟环境 |