如何设置Python的USER_SITE;我需要这样做吗?
我在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 个回答
用户站点是一个机制,旨在“允许用户在他们的主目录中本地安装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的设置。如果目录不存在,它也不会被添加到路径中。