关于python:什么是依赖项,为什么我应该关心它们?

What are dependencies and why should I care about them?

本问题已经有最佳答案,请猛点这里访问。

我是Web开发的初学者,目前正致力于创建一个Django Web应用程序来与MySQL数据库交互。在我阅读Django文档的过程中,它经常谈到"使用虚拟环境(如virtualenv)隔离依赖关系"。

我真的不明白什么是依赖关系,为什么创建虚拟环境会有助于将它们彼此"隔离"。什么是虚拟环境?它像是在你的机器上运行的另一台机器吗?

对于这些概念性问题的任何输入都将非常感谢。


virtualenv是可以在您的机器/服务器中创建的独立的python环境,它们非常有用,因为它们中的每一个都为您可能拥有的各种性质的python项目/程序(无论是Web应用程序、机器学习应用程序、数据处理微服务、物联网等)保存特定的/相关的库。

例如,假设您的机器/服务器正在托管2个或更多的Python项目/程序。它们中的每一个都可能需要不同版本的django、mysql connector等(可以通过pip安装)。因此,您需要为这些项目/程序中的每一个单独的Python环境来防止冲突。

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

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


有些包需要运行其他包的特定版本。例如,如果您构建一些代码来显式地与mypackage版本1.0.0一起运行,并且出现了一个更新的版本,它否决了您需要的功能,那么执行pip install mypackage将破坏您的代码。

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

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

这还允许您运行不同的解释程序。你可以给2.7号Python和3.6号Python开一个静脉。