【问题标题】:When/how to change python sys.prefix from /usr when site-packages is in /usr/local?当站点包位于 /usr/local 中时,何时/如何从 /usr 更改 python sys.prefix?
【发布时间】:2014-10-24 08:59:36
【问题描述】:

如果我正确地关注 https://docs.python.org/2/library/site.html,我需要将 site-packages 目录移动到 /usr/lib/python2.7 或将 sys.prefix 更改为 /usr/local。

前者似乎是错误的。对于后者,我可以找到的选项是直接编辑 site.py 或重新安装 python。编辑 site.py 是否被认为太 hacky,或者这是一个标准的事情? (ETA:我认为这是一个标准的做法,因为这就是它的用途。我想我真的在问这是否是这种情况下的最佳选择。)

还是我忽略了另一个选择?

/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

谢谢!

【问题讨论】:

    标签: python configuration path packages


    【解决方案1】:

    创建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 docs:

    在这些路径操作之后,尝试导入一个名为 sitecustomize 的模块,该模块可以执行任意特定于站点的自定义。它通常由系统管理员在 site-packages 目录中创建。如果此导入失败并出现ImportError 异常,则它会被静默忽略。如果 Python 在没有可用输出流的情况下启动,如 Windows 上的 pythonw.exe(默认情况下用于启动 IDLE),则忽略来自 sitecustomize 的尝试输出。 ImportError 以外的任何异常都会导致进程无声且可能是神秘的失败。

    之后,如果ENABLE_USER_SITE 为真,则尝试导入名为usercustomize 的模块,该模块可以执行任意用户特定的自定义。该文件旨在在用户站点包目录中创建(见下文),它是sys.path 的一部分,除非被-s 禁用。 ImportError 将被忽略。

    注意usercustomize.py 的位置取决于site.USER_SITE 的值,在Linux for Python-2.7 上为~/.local/lib/python2.7/site-packages

    注意管理员也会将sitecustomize.py 放置在sys.prefix 中的站点包文件夹中。

    其他选项是设置环境变量:

    • PYTHONUSERBASE 设置为/usr/local,这会将用户的基本Python 目录的位置从~/.local 切换到您设置的任何位置。 注意:这将禁用您安装到 ~/.local/lib/python2.7/site-packages 的软件包。

        export PYTHONUSERBASE=/usr/local
      
    • PYTHONPATH 设置为前置 /usr/local/lib/python2.7/site-packages,这会将其添加到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
    

    【讨论】:

    • 为什么是import os
    猜你喜欢
    • 2021-06-08
    • 2011-06-03
    • 2016-09-28
    • 2023-04-03
    • 2019-11-14
    • 1970-01-01
    • 2011-02-05
    • 2018-01-15
    • 1970-01-01
    相关资源
    最近更新 更多