【问题标题】:What are dependencies and why should I care about them? [duplicate]什么是依赖关系,我为什么要关心它们? [复制]
【发布时间】:2019-05-27 17:03:31
【问题描述】:

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

我不太明白什么是依赖项,以及为什么创建虚拟环境有助于将它们彼此“隔离”。
什么是虚拟环境? 是否像在您的机器上运行的另一台机器?

对于这些概念性问题的任何意见将不胜感激。

【问题讨论】:

标签: python django dependencies virtualenv


【解决方案1】:

Virtualenvs 是可以在您的机器/服务器中创建的独立 Python 环境,它们非常有用,因为它们中的每一个都为您可能拥有的每个 Python 项目/程序(无论是 Web 应用程序、机器学习应用、数据处理微服务、物联网等)。

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

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

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

【讨论】:

  • 所以基本上你是说虚拟环境是干净的,你可以启动和安装不同版本的语言或框架?
  • 是的,对于包/库,它只是创建新的“干净的石板”。但是,对于不同的 python 版本,您需要分别使用 python2 和 python3 二进制文件创建 virtualenvs,除非您使用 anaconda,它在使用各种 python/库版本创建“conda 环境”时更加“灵活”。
【解决方案2】:

某些软件包需要特定版本的其他软件包才能运行。例如,如果您构建一些代码以使用 mypackage 版本 1.0.0 显式运行,并且发布的新版本弃用了您需要的功能,那么执行 pip install mypackage 会破坏您的代码。

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

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

这也允许您运行不同的解释器。你可以有一个用于 python2.7 的 venv 和一个用于 python3.6 的 venv

【讨论】:

    猜你喜欢
    • 2011-02-10
    • 2010-11-01
    • 1970-01-01
    • 2014-01-05
    • 2014-10-29
    • 2019-09-25
    • 1970-01-01
    • 2016-03-17
    • 2012-02-15
    相关资源
    最近更新 更多