Apache+Django Python路径混淆:ImportError: 无法导入设置'mysite.settings

0 投票
2 回答
1224 浏览
提问于 2025-04-16 06:32

我使用的是 Python 2.4、Django 1.2.2 和 Apache 2.2.3。
我在 httpd.conf 文件中这样写:

<Location "/mysite/">
    PythonPath "['/home/usr/www'] + sys.path"
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE mysite.settings
    PythonOption django.root /mysite
    PythonDebug On
</Location>

settings.py 的路径是:/home/usr/www/mysite/
但是它不工作,当我访问 http://localhost/mysite/ 时,出现了问题。

导入错误:无法导入设置 'mysite.settings'

我修改了一下,把 /home/usr/www 改成了 /var/www,并把 settings.py 复制到 /var/www,结果就可以正常工作了。
那么为什么 Apache 会对这两个目录的处理不一样呢?

2 个回答

0

添加 PythonPath "['/home/usr/www/mysite'] + sys.path"

的意思是把一个新的路径加到 Python 的搜索路径里。这样,Python 在找文件的时候,会在这个新路径下也去找。这对于让 Python 找到你自己写的代码或者库是很有帮助的。

1

你在用SELinux吗?可以对比一下下面这两个命令的输出:

ls -laZ /var/www

ls -laZ /home/usr/www

很可能你的家目录无法被apache进程访问。如果真是这样,解决方法可能很简单,试试:

chcon -R --reference=/var/www /home/usr/www
chmod og+x /home/usr /home/usr/www

顺便提一下:http://docs.djangoproject.com/en/dev/howto/deployment/modpython/ 提醒说“mod_python将在未来的Django版本中被弃用。如果你在配置新的部署,强烈建议考虑使用mod_wsgi或其他支持的后端。”

撰写回答