我在Mac OS X上,我听说要避免全局安装包(使用sudo)可能导致OS X使用的python文件出现问题,安装python包的路径必须与此不同OS X.
目前python可执行文件安装在:
/usr/local/bin/
Pip在这里安装模块:
/usr/local/lib/python2.7/site-packages
从这里使用Python:
/usr/local/bin/python
这些路径安全吗?
答案 0 :(得分:4)
如果您使用的是OS X,那么您还应该使用/usr/bin
中的Python:
$ which -a python
/usr/local/bin/python
/usr/bin/python
如果您使用的是brew
,则第一个python
应该是符号链接:
$ ls -hl $(which python)
lrwxr-xr-x 1 user admin 34B Jun 23 16:53 /usr/local/bin/python -> ../Cellar/python/2.7.11/bin/python
如果您未使用brew
,则必须向我们解释您是如何安装第二版python
的。
您还应该至少有两个site-packages
:
$ find /usr -name 'site-packages'
/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
/usr/local/lib/python2.7/site-packages
如果您使用python
安装了brew
,则还应该pip
:
$ which pip
/usr/local/bin/pip
您应该将其升级到最新的pip
:
$ pip install --upgrade pip
使用python
安装/usr/local/bin/pip
软件包应该是安全的,因为它们将安装在/usr/local/lib/python2.7/site-packages
中。 /usr/local
路径专门用于local software。此外,brew
会将其文件安装到/usr/local
,因此如果您使用brew
,则表示您已经在那里安装了文件。
我不确定为什么有些人说不要在全球范围内安装任何软件包。我从来没有看过一个引用,解释了为什么这是一个坏主意。如果多个用户需要相同的软件包,则在全局安装它会更有意义。
当我第一次开始使用virtualenv
时,它并不总是像我预期的那样工作。我有一台需要requests
的多个用户的计算机,并且由于virtualenv
的问题,我使用pip
全局安装它。
自从我第一次开始使用它们以来,virtualenv
和pip
都有了很大改进,我可以看到使用它们可以防止出现一些问题。如果您正在开发需要最新版软件包的新软件,virtualenv
允许您安装软件包而不会影响系统的其余部分。但是,我仍然不明白为什么在全球范围内安装软件包是个坏主意。
答案 1 :(得分:0)
你不应该误解Python包路径,你根本不应该全局安装Python包。对每个项目使用virtualenv,让pip在virtualenv中本地安装库。
答案 2 :(得分:0)
我建议您使用虚拟环境,您可以在此处了解有关它们的更多信息:http://docs.python-guide.org/en/latest/dev/virtualenvs/
总结
$ virtualenv venv
这会在您将命令放入名为venv的文件夹中的任何目录中创建Python的副本。
$ source venv/bin/activate
$ pip install requests
$ deactivate
答案 3 :(得分:0)
您可以选择多种选项,最简单的(正如其他人建议的那样)是virtualenv
。希望如果没有安装,这是您应该在全球安装的少数几个模块之一。如果你有Python 3.4+,那么你“应该”拥有venv
模块(类似于virtualenv,但它由Python团队维护)。
python2
virtualenv ~/.py-venvs/python2
python3
python3 -m venv ~/.py-venvs/python3
您可以使用pip
将模块安装到本地用户,但我不确定这些天的支持程度如何:
pip install --user requests
您还可以将目录附加到$PYTHONPATH
bash变量,但这只应作为最后的手段并在家长监督下进行:D。在此之前尝试其他方法。