使用 Python 虚拟环境,编写更多代码,减少调试

通过在 Python 中使用 venv 来防止意外和不受欢迎的意外情况。
72 位读者喜欢这篇文章。
woman on laptop sitting at the window

CC BY 3.0 US Mapbox Uncharted ERG

如果您曾经与朋友分享过一个巧妙的电脑技巧、一个复杂的应用程序或介于两者之间的东西,那么您可能说过这样一句话:“嗯,它在我的电脑上运行正常。” 无论计算机变得多么先进,似乎总会反复出现与两台机器配置或安装的差异相关的问题。人们一直在尝试解决这个问题,对于 Python 开发人员来说,防止这种情况的最佳方法之一是使用虚拟环境。

在 Python 上创建虚拟环境的命令是

$ python -m venv ./myproject

激活虚拟环境

$ source ./myproject/bin/activate
(myproject)$ 

安装所需的模块

(myproject)$ python -m pip install -r requirements.txt

停用虚拟环境

(myproject)$ deactivate

虚拟环境是 Python 开发过程中重要的一部分。学习使用它们来保护您自己和您的用户免受意外和不受欢迎的意外情况的影响。简而言之,使用虚拟环境,这样您就可以花更多时间编写代码,减少调试时间!

Python 中的虚拟环境

虚拟环境是对 Python 运行代码方式的临时调整。虚拟环境不是 虚拟机,也不完全是 容器。实际上,虚拟环境会操纵您的 shell 的环境变量,以便您可以使用本地模块集执行已知版本的 Python。

没有虚拟环境的生活

如果没有虚拟环境,当您在终端中键入 pythonpython3 时,您将启动计算机上安装的任何版本的 Python

$ python --version
Python 2.7.17
$ python3 --version
Python 3.7

在星期一,这可能是版本 X,但在星期二,如果您碰巧在一夜之间更新了计算机,它可能会突然变成 Python Y。通常,这不是问题,因为 Python 在向后兼容性方面往往做得很好。但是,有些计算机为了遗留支持而保留非常旧版本的 Python,有些开发人员则急于使用该语言的最新功能而在最前沿进行编写。这可能会导致意想不到的问题。

同样的问题也扩展到各个 Python 模块。您可能会安装 ExamplePyMod 模块的 Z 版本,开发您的代码,并将您的应用程序发布到网上。如果一年前安装了 ExamplePyMod 的 X 或 Y 版本的人尝试运行您的代码,则可能会出现意外的兼容性问题。开发人员想当然地认为某个模块是理所当然的,这也是一个常见问题。如果您经常使用某个模块,以至于您实际上认为该模块是 Python 的一部分,那么您很可能会忘记将该模块添加为运行应用程序的要求。

在这两种情况下,要找到错误的根本原因,您都必须审核和更新您或用户的系统,以便你们都运行相同版本的相关内容。

在 Python 中使用虚拟环境

虚拟环境暂时将对 Python 的调用重定向到特定版本的 Python。例如,使用 Python 3.7 创建虚拟环境可确保 python 指向 Python 3.7,而不是 Python 2.7 或 Python 3.8 或您开发机器上可能存在的任何其他版本。

例如,这是一个使用 Python 3.7 创建的虚拟环境

# no virtual environment
$ python --version
Python 2.7.17

# virtual environment
$ python3.7 -m venv example37/venv
$ cd example37
$ source ./venv/bin/activate
(venv)$ python
Python 3.7
(venv)$ deactivate

# no virtual environment
$ python --version
Python 2.7.17

在虚拟环境中使用模块

模块在虚拟环境本地安装。当您在虚拟环境中工作时,您可以安装 ExamplePyMod 并整天使用它,但是一旦您离开虚拟环境,它就会消失。

这是模块安装过程

# no virtual environment
$ python3
>>> import flask
ModuleNotFoundError: No module named 'flask'

# virtual environment
(venv)$ python -m pip install flask
[...]
(venv) bash-4.3$ python -m pip install flask
Collecting flask
  Downloading [...]
Successfully installed [...]
(venv)$ python
>>> from flask import Flask
>>> app = Flask(__name__)
(venv)$ deactivate

# no virtual environment again
$ python3
>>> import flask
ModuleNotFoundError: No module named 'flask'

使用 pip 还原虚拟环境

每次坐下来编写代码时,您都可能觉得安装和重新安装所需的模块是一项额外的工作。实际上,虚拟环境系统鼓励您在项目目录中的 requirements.txt 文件中跟踪您正在使用的模块。您可以使用 pip 处理 requirements.txt,以处理所有依赖项的自动安装

$ cd myproject
$ source ./venv/bin/activate
(venv)$ python -m pip install -r requirements.txt
Installed [...]
$ python
>>> from flask import Flask
>>> import examplepymod

Python 还会缓存所需的模块,因此您可以立即启动并运行。

有关 pip 及其功能的完整概述,请下载 Moshe Zadka 的 pip 速查表

接下来阅读什么
标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,而且常常同时进行。

评论已关闭。

© . All rights reserved.