【发布时间】:2015-11-11 04:00:54
【问题描述】:
我在 centos6.5 和 python 2.6.6 中使用 Django (1.5.12) 和 httpd-2.2.15-29。
真是奇怪的错误,我被卡住了。请帮帮我!
我的项目树如下所示:
/opt/django-demo
|-- api
| |-- __init__.py
| |-- **views.py**
| |-- utils
| | |-- __init__.py
| | |-- **debug.py**
|-- demo
| |-- __init__.py
| |-- settings.py
| |-- urls.py
| |-- wsgi.py
我需要在views.py中导入utils.debug:
from api.utils import debug
它适用于 django runserver,但不适用于 apache:
Request Method: GET
Request URL: http://xxxxx/xxxx/
Django Version: 1.5.12
Exception Type: ImportError
Exception Value: No module named utils
Exception Location: /opt/django-demo/api/debug.py in <module>, line 9
Python Executable: /usr/bin/python
Python Version: 2.6.6
Python Path:
['/opt/django-demo',
'/usr/lib/python2.6/site-packages/pip-7.1.2-py2.6.egg',
'/usr/lib64/python26.zip',
'/usr/lib64/python2.6',
'/usr/lib64/python2.6/plat-linux2',
'/usr/lib64/python2.6/lib-tk',
'/usr/lib64/python2.6/lib-old',
'/usr/lib64/python2.6/lib-dynload',
'/usr/lib64/python2.6/site-packages',
'/usr/lib64/python2.6/site-packages/gst-0.10',
'/usr/lib64/python2.6/site-packages/gtk-2.0',
'/usr/lib64/python2.6/site-packages/webkit-1.0',
'/usr/lib/python2.6/site-packages',
'/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info',
'/opt/django-demo/api/utils']
从你可以看到的错误中,子目录已经被 wsgi.py 添加到 PYTHONPATH 中。
也没有错过__init__.py。
在我 mv utils/debug.py 到 api/debug.py 之后:
from api import debug
有效!!!
那么,为什么?
【问题讨论】:
-
由于
/opt/django-demo/api/utils在python 路径中,您可以:import debug。 -
@KlausD。是的,这行得通!但为什么?我需要添加几个子目录,我需要将它们全部添加到 PYTHONPATH 中吗? '/opt/django-demo' 已经在 PYTHONPATH 中,为什么
from api.utils import debug不工作? -
基本上你会在输出中看到 PYTHONPATH。您可以导入任何此路径中存在的东西。在您的情况下,您在 PYTHONPATH 中有
/opt/django-demo/api/utils,因此导入只会在那里找到debug.py。您还应该能够导入与第一个路径匹配的from api.utils import debug。对于开发来说最重要的是两件事:a) 没有名称冲突,如果有两个具有相同名称的包/模块,事情会变得很糟糕;b) 确保 PYTHONPATH 设置在您以不同方式运行代码时没有区别。
标签: python django apache mod-wsgi