我正在尝试使用此命令安装Python软件包
pip install <name of package>
我遇到权限错误,不确定为什么。我可以使用来运行它sudo
,但是有人告诉我这是个坏主意,我应该改用virtualenv。
什么是virtualenv?它对我有什么作用?
与系统Python和库一起运行会将您限制为OS提供商选择的一个特定Python版本。试图在一个Python安装上运行所有Python应用程序,可能会导致库集合之间发生版本冲突。对系统Python的更改也有可能破坏依赖于它的其他OS功能。
虚拟环境或“ 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
(例如,带有python3 -m venv ./venv
)的目录中创建了virtualenv 。
要在virtualenv中工作,请激活它:
$ . ./venv/bin/activate
(venv)$
如果您有Windows系统,请使用以下命令:
$ venv\Scripts\activate
将(venv)
在shell提示让你知道哪些VIRTUALENV您已经激活了,但你可以打开此功能,如果你不喜欢它。您可以运行所有常用的Python命令,它们将在您的virtualenv本地:
(venv)$ pip install requests numpy
[...]
(venv)$ python
[...]
>>> import requests
>>> import numpy as np
>>>
python
将运行您在virtualenv中安装的Python版本,因此(例如)您无需键入python3
即可获取Python3。它运行的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
>>>
您可以通过停用虚拟环境来摆脱它:
(venv)$ deactivate
$ python
[...]
>>> import requests
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'requests'
您可以创建任意数量的virtualenv,它们不会互相干扰,也不会干扰您的系统软件包。virtualenv是“仅”一个目录,在该目录下有一堆二进制文件和脚本,因此您可以通过删除任何目录的相同方式来删除virtualenv(rm -r venv
在Unix上)。如果在删除虚拟环境时将其激活,则可能会使您的shell感到困惑,因此deactivate
在这种情况下首先使用它可能是一个好主意。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句