使用 Python 自带的 venv 创建虚拟环境,安装 Flask、Django

          • 一、创建项目目录
          • 二、创建虚拟环境
          • 三、激活虚拟环境
          • 四、安装第三方库
          • 五、退出虚拟环境
          • 六、删除虚拟环境

为了解决维护不同应用程序对应不同版本的问题,Python 使用了虚拟环境的概念。 虚拟环境是 Python 解释器的完整副本。在虚拟环境中安装三方包时只会作用到虚拟环境,全局 Python 解释器不受影响。

在 python 3.3 以上的版本中,创建虚拟环境的功能已经成为内置模块

一、创建项目目录

先找个合适的文件夹创建项目目录,我将这个项目目录命名为 Python-venv-test。我想完全在 Win10 的命令行终端中操作这个教程:

  • 找到合适的根目录打开 cmd
  1. cmd1

  2. cmd2

  3. 输入 cmd 后回车,弹出第 4 步的终端窗口cmd3

  4. 注意到此时的根目录已经是 F:\,而不是默认启动在 C 盘使用 Python 自带的 venv 创建虚拟环境,安装 Flask、Django_第1张图片

  • 创建项目文件夹
    使用 Python 自带的 venv 创建虚拟环境,安装 Flask、Django_第2张图片
二、创建虚拟环境

默认情况下在 Python 3.3 及更高版本中虚拟环境已经成为内置模块,可以直接通过如下命令来创建它:

$ python -m venv venv

命令执行完成后,当前目录下就会新增一个名为 venv 的目录来存储这个虚拟环境的相关文件。

使用这个命令来让 Python 运行 venv 包,它会创建一个名为 venv 的虚拟环境。命令中的第一个“venv”是 Python 创建虚拟环境的模块的名称,第二个是虚拟环境名称。如果你觉得这样很混乱,可以用你自定义的虚拟环境名字替换第二个 venv。我习惯在项目目录中创建名为 venv 的虚拟环境,所以无论何时cd到一个项目中,都会找到相应的虚拟环境。

三、激活虚拟环境

创建完毕之后还需要激活才能够进入这个虚拟环境。 要激活你的全新虚拟环境,需使用以下命令:

$ venv\Scripts\activate  # 这相当于调用刚刚新建的虚拟环境中的激活方法 activate.bat
(venv) $ _               

当前目录是虚拟环境的名称,这表明你已经在激活的虚拟环境中了:

使用 Python 自带的 venv 创建虚拟环境,安装 Flask、Django_第3张图片

四、安装第三方库

激活一个虚拟环境,终端会话的环境配置就会被修改,之后你键入 python 的时候,实际上是调用的虚拟环境中的 Python 解释器。 此外,终端提示符也被修改成包含被激活的虚拟环境的名称的格式。这种激活是临时的和私有的,因此在关闭终端窗口时它们将不会保留,也不会影响其他的会话。 那么,当你需要同时打开多个终端窗口来调试不同的应用时,每个终端窗口都可以激活不同的虚拟环境而不会相互影响。

一般 pip 下载会很慢,可以参考 Python- 解决PIP下载安装速度慢

(venv) $ pip install --user -U pip  # 更新 pip,也可以不更新。
...
(venv) $ pip install flask
...
(venv) $ pip install django
...

更新 pip 的问题:
可以参考我的《python 虚拟环境中更新 pip,解决 PermissionError 问题》

  • 如果使用 pip install -U pip 的时候遇到 "PermissionErro" 无权访问磁盘读取的问题,按照网上的教程在命令中赋予用户权限:pip install --user -U pip。但由于安装出错,原来的 pip 已经卸载了,所以要手动删掉 venv 文件夹重新创建虚拟环境。
  • 如果一开始就使用 python -m pip install --upgrade pip 来更新 pip,也会提示安装成功,但这是使用了全局安装过的 pip,而不是在这个虚拟环境中。运行 pip list 还可以看到以前安装的其他第三方包。所以,解决办法跟上面一样,重来,然后运行 pip install --user -U pip
五、退出虚拟环境

直接敲:

(venv) $ deactivate

使用 Python 自带的 venv 创建虚拟环境,安装 Flask、Django_第4张图片

六、删除虚拟环境

我不知道怎么做,我直接手动删掉 venv 文件夹了……

你可能感兴趣的:(Python,Web)