我正在尝试使用此命令安装Python包
pip install <name of package>
我收到了许可错误,我不确定原因。我可以用sudo
运行它,但有人告诉我这是一个坏主意,我应该使用virtualenv。
什么是virtualenv?它对我有什么用?
答案 0 :(得分:38)
使用系统运行Python和库将您限制为由OS提供商选择的一个特定Python版本。尝试在一个Python安装上运行所有Python应用程序可能会导致库集合之间发生版本冲突。对系统Python的更改也可能会破坏依赖于它的其他操作系统功能。
Virtual environments, or "virtualenvs"是轻量级,自包含的Python安装,旨在简化设置,“只需工作”,无需大量配置或专业知识。
virtualenv
避免了全局安装Python包的需要。当virtualenv处于活动状态时,pip
将在环境中安装包,这不会以任何方式影响基本的Python安装。
在Python 3.3或更高版本中,您可以按如下方式创建virtualenv:
$ python3 -m venv ENV_DIR
对于Windows,您应该将python3
替换为python.exe的完整路径:
>C:\Python34\python.exe -m venv ENV_DIR
(这是典型的Python安装;您的系统可能会有所不同。)
在旧版本的Python(包括Python 2)中,以下命令之一在大多数情况下都应该起作用:
$ virtualenv ENV_DIR
$ venv ENV_DIR
$ pyvenv ENV_DIR
$ pyvenv3 ENV_DIR
ENV_DIR
应该是一个不存在的目录。该目录可以有任何名称,但为了简化这些说明,我假设您已在名为venv
的目录中创建了virtualenv(例如python3 -m venv ./venv
)。
要在virtualenv中工作,请激活它:
$ . ./venv/bin/activate
(venv)$
如果你有一个Windows系统,请使用它:
$ venv\Scripts\activate
shell提示符中的(venv)
可让您知道已激活的virtualenv,但如果您不喜欢,可以关闭此功能。你可以运行所有常用的Python命令,它们将是你的virtualenv的本地命令:
(venv)$ pip install requests numpy
[...]
(venv)$ python
[...]
>>> import requests
>>> import numpy as np
>>>
python
将运行您安装到virtualenv中的Python版本,因此(例如)您不必键入python3
来获取Python 3.它运行的Python将具有访问所有标准库模块和您安装到virtualenv中的所有软件包,但(默认情况下)没有安装在系统范围的site-packages
目录中的软件包。
最后一条规则很重要:通过将virtualenv限制为仅使用本地安装的软件包,即使下周安装或更新了一些新的系统范围软件包,您也可以确保控制项目正在使用哪些依赖项。如果您愿意,可以获得已安装软件包的列表:
(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
>>>
你可以通过停用它来摆脱virtualenv:
(venv)$ deactivate
$ python
[...]
>>> import requests
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'requests'
您可以创建任意数量的virtualenvs,它们不会相互干扰,也不会与您的系统包相互干扰。 virtualenv是“只是”一个目录,下面有一堆二进制文件和脚本,所以你可以像删除任何目录(Unix上的rm -r venv
)一样删除virtualenv。如果virtualenv在你删除时被激活,你可能会混淆你的shell,所以在这种情况下首先deactivate
可能是个好主意。
答案 1 :(得分:4)
有时您没有获得root权限,最终可能无法使用sudo。许多其他时候,不建议使用sudo来安装软件包,因为它可能会覆盖某些其他应用程序可能正在使用的软件包。
Virtualenv可以帮助您创建一个单独的环境,您不需要root权限,也可以根据需要定制环境。它由自包含的python安装组成,只与您特定的创建环境进行交互。
基本上,它为您提供了一些自由,同时避免损坏(或修改)可能托管旧应用程序的许多旧功能的根环境。
安装也很简单。
答案 2 :(得分:0)
使用pip
和sudo
安装软件包将在全局安装软件包,这可能会破坏某些系统工具。
通过全局安装,这意味着您将在/usr/lib/python2.7/site-package
之类的位置安装软件包,因此,如果某些软件包需要python软件包的先前版本,则此操作可能会破坏它。
virtualenv
允许您通过创建隔离的python环境避免全局安装Python软件包。这意味着它将仅在您所需的项目文件夹中安装软件包。
在Mac和Linux上
python3 -m pip install --user virtualenv
python3 -m virtualenv env
源环境/ bin /激活
激活后,您可以使用pip安装软件包
有关在Windows中使用它的更多信息: How to use virtaulen in Windows