什么是虚拟环境?为什么我应该使用它?

2024-12-24 08:56:00
admin
原创
99
摘要:问题描述:我正在尝试使用此命令安装 Python 包pip install <name of package> 我遇到了权限错误,但我不知道为什么。我可以用 来运行它sudo,但有人告诉我这不是一个好主意,我应该使用虚拟环境。什么是虚拟环境?它能为我做什么?解决方案 1:使用系统 Python 和...

问题描述:

我正在尝试使用此命令安装 Python 包

pip install <name of package>

我遇到了权限错误,但我不知道为什么。我可以用 来运行它sudo,但有人告诉我这不是一个好主意,我应该使用虚拟环境。

什么是虚拟环境?它能为我做什么?


解决方案 1:

使用系统 Python 和库运行会限制您只能使用操作系统提供商选择的特定 Python 版本。尝试在一个 Python 安装上运行所有 Python 应用程序可能会导致库集合之间发生版本冲突。对系统 Python 的更改也可能会破坏依赖于它的其他操作系统功能。

虚拟环境,或“virtualenvs”是轻量级的、独立的 Python 安装,旨在以最少的麻烦进行设置,并且无需大量配置或专业知识即可“正常工作”。

virtualenv避免了全局安装 Python 包的需要。当虚拟环境处于活动状态时,pip 将在环境中安装包,这不会以任何方式影响基本 Python 安装。

在 Python 3.3 或更高版本中,您可以按如下方式创建虚拟环境:

$ python3 -m venv ENV_DIR

对于 Windows,您应该将其替换python3为 python.exe 的完整路径:

>C:Python34python.exe -m venv ENV_DIR

(这是典型的 Python 安装;您的系统可能会有所不同。)

在旧版本的 Python(包括 Python 2)中,大多数情况下以下命令之一应该可以起作用:

$ virtualenv ENV_DIR
$ venv ENV_DIR
$ pyvenv ENV_DIR
$ pyvenv3 ENV_DIR

ENV_DIR应该是一个不存在的目录。该目录可以有任意名称,但为了使这些说明简单易懂,我将假设您已在名为的目录中创建了虚拟环境venv(例如使用python3 -m venv ./venv)。

为了在你的虚拟环境中工作,你需要激活它:

$ . ./venv/bin/activate
(venv)$ 

或者如果你有 Windows 系统,请使用这个:

$ venvScriptsactivate

shell提示符(venv)会让您知道您已激活哪个虚拟环境,但是如果您不喜欢,可以关闭此功能。您可以运行所有常用的 Python 命令,它们将位于您的虚拟环境中:

(venv)$ pip install requests numpy
[...]
(venv)$ python
[...]
>>> import requests
>>> import numpy as np
>>> 

python将运行您在虚拟环境中安装的 Python 版本,因此(例如)您不必输入python3来获取 Python 3。它运行的 Python 将可以访问所有标准库模块和您在虚拟环境中安装的所有软件包,但(默认情况下)不能访问系统范围目录中安装的任何软件包site-packages

最后一条规则很重要:通过限制虚拟环境仅使用本地安装的软件包,您可以确保精确控制项目正在使用的依赖项,即使下周安装或更新了某个新的系统范围的软件包。如果您愿意,您可以获取已安装软件包的列表:

(venv)$ pip freeze
requests==2.13.0
numpy==1.12.0
(venv)$ 

pip也可以解析这种格式并从中进行安装,并且它将安装相同的版本,即使在此期间已经发布了更新:

(venv)$ pip freeze >requirements.txt

(some-other-venv)$ pip install -r requirements.txt
[...]
(some-other-venv)$ python
>>> import requests
>>> import numpy as np
>>> 

您可以通过停用虚拟环境来退出它:

(venv)$ deactivate
$ python
[...]
>>> import requests
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'requests'

您可以根据需要创建任意数量的虚拟环境,它们不会相互干扰,也不会干扰您的系统软件包。虚拟环境“只是”一个目录,其下有一堆二进制文件和脚本,因此您可以像删除任何目录一样删除虚拟环境(在 Unix 上)。如果在删除虚拟环境时激活了虚拟环境,则可能会混淆您的 shell,因此在这种情况下,rm -r venv最好先删除它。deactivate

解决方案 2:

使用安装软件包sudo pip将会全局安装软件包,这可能会破坏某些系统工具。

通过全局安装,意味着您将在适当的位置安装您的包,/usr/lib/python2.7/site-package因此如果某些包需要您 python 包的先前版本,此操作可能会破坏它。

virtualenv通过创建独立的 Python 环境,您可以避免全局安装 Python 包。这意味着它将只在您想要的项目文件夹中安装包。

在 Mac 和 Linux 上

  • 安装

python3 -m pip install --user virtualenv
  • 创建虚拟环境:转到所需的项目文件夹

python3 -m virtualenv env
  • 激活虚拟环境:在你想要的项目文件夹中

source env/bin/activate

激活后,您可以使用 pip 安装您的软件包。

有关在 Windows 中使用它的更多信息:
如何在 Windows 中使用 virtualenv

解决方案 3:

有时您没有 root 权限,因此可能无法使用 sudo。很多时候,不建议使用 sudo 安装软件包,因为它可能会覆盖其他应用程序正在使用的软件包。

Virtualenv可以帮助您创建一个独立的环境,您不需要 root 权限,并且能够根据您的需要定制环境。它由独立的 Python 安装组成,仅与您创建的特定环境交互。

所以基本上,它给了你一些自由,同时避免损坏(或修改)可能托管许多旧应用程序的旧功能的根环境。

安装也非常简单。

解决方案 4:

我将把你的问题分成两部分。

什么是虚拟环境?

Python 有自己的下载、存储和解析站点包的方法。但是 Python 无法区分site-package目录中的不同版本。包将安装在其中一个目录中,可以通过运行site.getsitepackages()命令找到该目录的名称。

>>> import site
>>> site.getsitepackages()

这意味着package_v2.0.1package_v3.0.1必须位于具有相同名称的同一目录中package,即,这显然是不可能的。现在,您可能会问为什么我们的系统上需要具有不同版本的相同包。这是因为多个项目可能需要不同版本的 Python 包,甚至需要不同的 Python 版本。因此,需要有某种东西来解决这些冲突,并Virtualenv解决这个问题。

它对我有什么作用?

它隔离了 Python 项目的环境,以便每个项目都可以有自己的依赖项。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1124  
  IPD(Integrated Product Development,集成产品开发)流程是一种广泛应用于高科技和制造业的产品开发方法论。它通过跨职能团队的紧密协作,将产品开发周期缩短,同时提高产品质量和市场成功率。在IPD流程中,CDCP(Concept Decision Checkpoint,概念决策检查点)是一个关...
IPD培训课程   79  
  研发IPD(集成产品开发)流程作为一种系统化的产品开发方法,已经在许多行业中得到广泛应用。它不仅能够提升产品开发的效率和质量,还能够通过优化流程和资源分配,显著提高客户满意度。客户满意度是企业长期成功的关键因素之一,而IPD流程通过其独特的结构和机制,能够确保产品从概念到市场交付的每个环节都围绕客户需求展开。本文将深入...
IPD流程   70  
  IPD(Integrated Product Development,集成产品开发)流程是一种以跨职能团队协作为核心的产品开发方法,旨在通过优化资源分配、提高沟通效率以及减少返工,从而缩短项目周期并提升产品质量。随着企业对产品上市速度的要求越来越高,IPD流程的应用价值愈发凸显。通过整合产品开发过程中的各个环节,IPD...
IPD项目管理咨询   82  
  跨部门沟通是企业运营中不可或缺的一环,尤其在复杂的产品开发过程中,不同部门之间的协作效率直接影响项目的成败。集成产品开发(IPD)作为一种系统化的项目管理方法,旨在通过优化流程和增强团队协作来提升产品开发的效率和质量。然而,跨部门沟通的复杂性往往成为IPD实施中的一大挑战。部门之间的目标差异、信息不对称以及沟通渠道不畅...
IPD是什么意思   74  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用