无法在Python/Django中导入文件

0 投票
4 回答
3327 浏览
提问于 2025-04-15 14:18

我不太明白发生了什么,但在我自己的笔记本电脑上,一切都正常。当我把代码上传到我的主机上,使用的是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 个回答

0

确保你的项目(或者说在“dtms”应用程序上面的文件夹)在Python的模块搜索路径中。

这可能需要你在网页服务器的设置中进行调整。之所以在Django的命令行工具中能正常工作,可能是因为你在运行命令行工具时正处于项目的文件夹里。

如果你使用的是带有mod_python的Apache服务器,这里有详细的说明在这里

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 可能和你想的不一样,或者某个东西在奇怪的位置,或者路径有问题等等。

撰写回答