什么是依赖关系,我为什么要关心它们?

What are dependencies and why should I care about them?

我是网络开发的初学者,目前正在创建一个 Django 网络应用程序以与 MySQL 数据库交互。
在我阅读 Django 文档的过程中,它不断谈论“使用 virtualenv 等虚拟环境隔离依赖项”。

我真的不明白什么是依赖关系以及为什么创建虚拟环境会帮助'isolate'他们彼此。
什么是虚拟环境?是否像你机器上的另一台机器运行?

对于这些概念性问题,我们将不胜感激。

一些软件包需要其他软件包的特定版本才能 运行。例如,如果您使用 mypackage 版本 1.0.0 明确地为 运行 构建了一些代码,并且出现了一个更新的版本,该版本弃用了您需要的功能,那么执行 pip install mypackage 会破坏您的代码.

示例:如果您想打包代码,您的依赖项之一就是 django。如果您尝试在没有 django 的情况下 运行 您的代码,它会中断,显示 ModuleNotFound: No module named 'django'。因此,您需要在 运行 编写代码之前 pip install 它。同样,您也不会想要 django 早期 版本,因为它的某些功能可能在早期版本中不可用,或者它们的功能可能有所不同。

virtualenv 本身就是一个新的 python 解释器。它有自己的 python 可执行文件、自己的 site-packages 包目录等。您可以通过 command-prompt/shell activate 环境然后访问它。 anaconda 是 virtualenv 管理器的另一个例子。在虚拟环境中,您可以管理包以匹配特定应用程序,这样构建新环境不会影响您的其他代码并可能破坏所述代码,因为它是一个独立的解释器,不依赖于基础 python 在你的机器上安装。

这还允许您 运行 不同的口译员。你可以有一个 python2.7 的 venv 和一个 python3.6

的 venv

Virtualenvs 是独立的 python 环境,可以在您的 machine/server 中创建,它们非常有用,因为每个 python [=] 都拥有 specific/relevant 个库 project/programs 您可能拥有的各种性质(Web 应用程序、机器学习应用程序、数据处理微服务、物联网等)。

例如,假设您的 machine/server 托管了 2 个或更多 python projects/programs。他们每个人都可能需要不同版本的 Django、MySQL-connector 等(可以通过 pip 安装)。因此,您需要为每个 projects/programs 单独的 python 环境以防止冲突。

创建 virtualenvs 很简单,您可以通过 pip 安装它们。 参见:https://virtualenv.pypa.io/en/latest/

此后,您可以为每个 python 项目创建不同的 virtualenv,以隔离 python 环境和所需的 libraries/packages(通过 pip 再次为每个环境安装) 每个项目。