无法在Python/Django中导入文件
我不太明白发生了什么,但在我自己的笔记本电脑上,一切都正常。当我把代码上传到我的主机上,使用的是Python 2.3.5时,我的views.py找不到models.py里的任何东西。我有:
from dtms.models import User
from dtms.item_list import *
我的模型、item_list和views文件都在/mysite/dtms/这个文件夹里。
结果它告诉我找不到User。有没有什么建议?
另外,当我使用django的命令行工具时,我可以用“from dtms.models import *”来导入,结果一切正常。
好吧,在按照下面的建议操作后,我得到了一个日志文件:
syspath = ['/home/victor/django/django_projects', '/home/victor/django/django_projects/mysite']
DEBUG:root:something <module 'dtms' from '/home/victor/django/django_projects/mysite/dtms/__init__.pyc'>
DEBUG:root:/home/victor/django/django_projects/mysite/dtms/__init__.pyc
DEBUG:root:['/home/victor/django/django_projects/mysite/dtms']
我不太确定这是什么意思——我的文件在mysite/dtms/item_list.py里。这是否意味着它被加载了?我看到dtms模块被加载了,但它还是找不到dtms.models。
4 个回答
2
要查看你的 sys.path,你可以按照 Alex 的说法来做,不过不是用 print,而是用 logging 模块:
import logging
LOG_FILENAME = '/tmp/logging_example.out'
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG,)
logging.debug('This message should go to the log file')
5
使用 from X import *
这个写法并不意味着 from X import Wowie
也一定能成功,你知道吗?如果你能戒掉对 import *
的依赖,长远来看你会快乐得多,不过这又是另一个话题;-)
我对处理导入问题的一般建议是,用 try/except 把有问题的导入包裹起来:
try:
from blah import bluh
except ImportError, e:
import sys
print 'Import error:', e
print 'sys.path:', sys.path
blah = __import__('blah')
print 'blah is %r' % blah
try:
print 'blah is at %s (%s)' % (blah.__file__, blah.__path__)
except Exception, e:
print 'Cannot give details on blah (%s)' % e
这样做通常能很快让你发现你的 sys.path 可能和你想的不一样,或者某个东西在奇怪的位置,或者路径有问题等等。