如何设置Python的USER_SITE;我需要这样做吗?

2 投票
1 回答
14504 浏览
提问于 2025-04-28 10:39

我在OS X(10.10)上安装了Python,主要通过pip来管理,网站包放在

/Library/Python/2.7/site-packages

苹果的包放在

/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python

还有标准的苹果Python安装在

/System/Library/Frameworks/Python.framework/Versions/2.7

我没有做什么特别的设置,所以我觉得这应该是比较标准的做法。我把我的包安装在网站包目录里,唯一“自定义”的地方就是删除了一些我不需要的苹果包,或者是那些和我在网站包目录里维护的包重复的包。

一切都运行得很好,我的路径看起来也都正常;不过当我执行

python -m site

时,结果让我有点困惑。

虽然这显示的 sys.path 对我来说是有道理的

sys.path = [
    '/Users/Rax',
    '/Users/Rax/Documents/Projects/Coding/Python', # From PYTHONPATH
    '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
    '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
    '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
    '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
    '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
    '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python',
    '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
    '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
    '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
    '/Library/Python/2.7/site-packages',
]

但我还得到了

USER_BASE: '/Users/Rax/Library/Python/2.7' (doesn't exist)
USER_SITE: '/Users/Rax/Library/Python/2.7/lib/python/site-packages' (doesn't exist)
ENABLE_USER_SITE: True

这让我有点搞不懂。

难道 USER_SITE 不应该是 /Library/Python/2.7/site-packages 吗?如果是的话,我该怎么设置它呢?我不能把 USER_SITE 设置为 /Library/Python/2.7/,因为 lib/python/ 会被加到路径里。


这让我更加困惑的是,/Library/Python/2.7/site-packages 确实被正确地加到了我的 sys.path(我也不知道是从哪里来的),而且

import pkg_resources
pkg_resources.__file__

的结果是 /Library/Python/2.7/site-packages/pkg_resources.pyc

暂无标签

1 个回答

3

用户站点是一个机制,旨在“允许用户在他们的主目录中本地安装Python包。”(详细信息见这里)。也就是说,它是为了用户自己使用的包,而不是系统范围内的安装。如果你的系统上有多个用户,他们的用户站点包会是分开的。

文档中,我们可以看到USER_SITE是:

运行中的Python的用户站点包的路径。如果还没有调用getusersitepackages(),这个值可以是None。默认值在UNIX和非框架的Mac OS X上是~/.local/lib/pythonX.Y/site-packages,在框架的Mac上是~/Library/Python/X.Y/lib/python/site-packages,而在Windows上是%APPDATA%\Python\PythonXY\site-packages。这个目录是一个站点目录,这意味着其中的.pth文件会被处理。

(用户基础的路径也是在同一个位置)

所以,回答你的问题——我认为它们设置得是正确的。这是一个不同的站点包位置,而不是常规的那个。

你还可以在一般模块文档中看到:

这个文件是打算在用户站点包目录中创建的(见下文),这个目录是sys.path的一部分,除非通过-s禁用。导入错误会被静默忽略。

所以这些路径不存在也没关系。

另外,关于你的问题:

USER_SITE不应该是/Library/Python/2.7/site-packages吗?

注意文档中提到~/Library/... - 这个~会被替换成/Users/Rax/

你根本不需要担心USER_SITE的设置。如果目录不存在,它也不会被添加到路径中。

撰写回答