什么是虚拟环境?为什么我应该使用它?
- 2024-12-24 08:56:00
- admin 原创
- 99
问题描述:
我正在尝试使用此命令安装 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.1
和package_v3.0.1
必须位于具有相同名称的同一目录中package
,即,这显然是不可能的。现在,您可能会问为什么我们的系统上需要具有不同版本的相同包。这是因为多个项目可能需要不同版本的 Python 包,甚至需要不同的 Python 版本。因此,需要有某种东西来解决这些冲突,并Virtualenv
解决这个问题。
它对我有什么作用?
它隔离了 Python 项目的环境,以便每个项目都可以有自己的依赖项。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)