何时/如何将Python sys.prefix从/usr更改为/usr/local中存在site-packages时?

5
如果我理解https://docs.python.org/2/library/site.html正确的话,我需要将site-packages目录移动到/usr/lib/python2.7或将sys.prefix更改为/usr/local。
前者似乎不对。对于后者,我能找到的选项是直接编辑site.py或重新安装python。编辑site.py是否被认为太hacky,还是这是一个标准的做法?(预计:我认为这是一个标准的做法,因为这就是它的用途。我想知道在这种情况下这是否是最好的选择。)
还是我忽略了其他选项?
/usr/lib与/usr/local/lib的比较:
auto@virgo:/etc/apache2$ ls -ld /usr/lib/python2.7/site-packages
ls: cannot access /usr/lib/python2.7/site-packages: No such file or directory

auto@virgo:/etc/apache2$ ls -ld /usr/local/lib/python2.7/site-packages
drwxrwsr-x 2 root staff 4096 Aug 29  2013 /usr/local/lib/python2.7/site-packages

Python sys.prefix:

auto@virgo:~$ python
Python 2.7.3 (default, Apr 10 2013, 05:46:21) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print sys.prefix
/usr

谢谢!

1个回答

7
创建 sitecustomize.pyusercustomize.py 并将其添加到 site.PREFIXES
import site
SITEPKGS = '/usr/local/lib/python2.7/site-packages'
site.addsitedir(SITEPKGS)
site.PREFIXES += ['/usr/local']

假设/usr/local/lib/python2.7/site-packages是您的/usr/local站点包路径。
根据site文档:
经过这些路径操作后,将尝试导入名为sitecustomize的模块,该模块可以执行任意特定于站点的自定义。它通常由系统管理员在site-packages目录中创建。如果此导入失败并出现ImportError异常,则会被静默忽略。如果Python在没有可用输出流的情况下启动,例如在Windows上使用的pythonw.exe(默认用于启动IDLE),则来自sitecustomize的尝试输出将被忽略。除了ImportError之外的任何异常都会导致进程的静默且可能神秘的失败。
此后,如果ENABLE_USER_SITE为true,则会尝试导入名为usercustomize的模块,该模块可以执行任意用户特定的自定义。该文件旨在在用户站点包目录中创建(请参见下文),该目录是sys.path的一部分,除非通过-s禁用。将静默忽略ImportError
注意:usercustomize.py应放置的位置取决于site.USER_SITE的值,在Linux上,对于Python-2.7,该值为~/.local/lib/python2.7/site-packages
注意:管理员还需要将sitecustomize.py放置在sys.prefix中找到的站点包文件夹中。
其他选项是设置环境变量:
  • set PYTHONUSERBASE to /usr/local which will switch the location of the user's base Python directory from ~/.local to whatever you set it to. Note: This would disable your packages installed into ~/.local/lib/python2.7/site-packages.

      export PYTHONUSERBASE=/usr/local
    
  • set PYTHONPATH to prepend /usr/local/lib/python2.7/site-packages which would add it to sys.path.

      export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH
    

环境变量可以在您的.bashrc.bash_profile设置中导出,添加到/etc/environment中以使其系统范围内生效,或者您可以简单地在Python解释器调用之前使用所需的环境变量。

$ PYTHONPATH=/usr/local/lib/python2.7/site-packages python

1
Why import os? - Sam Marinelli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接