在MacOS上用户安装的python包路径应该是什么?

时间:2016-09-23 14:39:09

标签: python macos pip packages pythonpath

我在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

这些路径安全吗?

4 个答案:

答案 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全局安装它。

自从我第一次开始使用它们以来,virtualenvpip都有了很大改进,我可以看到使用它们可以防止出现一些问题。如果您正在开发需要最新版软件包的新软件,virtualenv允许您安装软件包而不会影响系统的其余部分。但是,我仍然不明白为什么在全球范围内安装软件包是个坏主意。

答案 1 :(得分:0)

你不应该误解Python包路径,你根本不应该全局安装Python包。对每个项目使用virtualenv,让pip在virtualenv中本地安装库。

答案 2 :(得分:0)

我建议您使用虚拟环境,您可以在此处了解有关它们的更多信息:http://docs.python-guide.org/en/latest/dev/virtualenvs/

总结

  1. 创建虚拟环境(venv):$ virtualenv venv
  2.   

    这会在您将命令放入名为venv的文件夹中的任何目录中创建Python的副本。

    1. 激活虚拟环境:$ source venv/bin/activate
    2. 使用pip安装包:$ pip install requests
    3. 完成后停用虚拟环境:$ 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。在此之前尝试其他方法。