【问题标题】:site.addsitedir not fully processing .pth filesite.addsitedir 未完全处理 .pth 文件
【发布时间】:2026-02-02 21:30:02
【问题描述】:

这是一个 apache/mod_wsgi/virtualenv/django 堆栈。在 virtualenv site-packages 目录中,我有一个 virtualenv_path_extensions.pth 文件。 apache conf 有一个

WSGIScriptAlias / /path/to/my.wsgi

my.wsgi 有

site.addsitedir('/path/to/virtualenv/site-packages')

现在,如果我启动 python shell,导入站点并调用上面的行,我的 sys.path 看起来是正确的:它已经加载了 virtualenv_path_extensions.pth 中的所有路径

但是,在 apache 下我收到 500 个错误,因为它声称 django 不在路径上。当我在 my.wsgi 中的 addsitedir 行之后记录 sys.path 时,它看起来好像添加了 virtualenv_path_extensions.pth 的第一行,而不是其余的!

是什么原因造成的?

【问题讨论】:

    标签: python apache mod-wsgi virtualenv


    【解决方案1】:

    啊,selinux :D

    没有加载的路径有错误的上下文,apache 无法触摸它们...

    ** 出现谜团时一定要记得查看那些 selinux 日志**

    【讨论】:

    • 从内存中,即使不使用 SELinux 也可能发生这种情况。基本上,如果附加目录不可读,则 site.addsitedir() 将不会添加它们。因此需要确保即使在不使用 SELinux 的情况下,Apache 用户也可以读取目录。