【问题标题】:Cannot import file in Python/Django无法在 Python/Django 中导入文件
【发布时间】:2009-09-14 00:34:57
【问题描述】:

我不确定发生了什么,但在我自己的笔记本电脑上,一切正常。当我使用 Python 2.3.5 上传到主机时,views.py 在我的 models.py 中找不到任何内容。我有:

from dtms.models import User
from dtms.item_list import *

我的模型、item_list 和视图文件在 /mysite/dtms/ 中的位置

它最终告诉我它找不到用户。有什么想法吗?

另外,当我使用 django shell 时,我可以执行“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

【问题讨论】:

  • 好的,所以我的模型之一定义为: class Item_list(): blah blah 当我这样做时,在我的笔记本电脑上,python2.5 能够做到: from dtms.item_list import Item_list when由于与python2.4的兼容性问题,我取出了Item_list之后的(),该行在python2.5中不起作用。在 python2.4 上会发生什么事情吗?

标签: python django


【解决方案1】:

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 不是您想象的那样,和/或 blah 在某个奇怪的地方或带有奇怪的路径等。

【讨论】:

  • 当我在 fastcgi 设置上运行 django 时,你知道我如何能够得到这个输出吗?我不知道它会在哪里打印任何东西。
【解决方案2】:

要检查您的 sys.path,您可以按照 Alex 所说的做,但您可以使用日志模块,而不是使用 print:


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')

【讨论】:

    【解决方案3】:

    确保您的项目(或“dtms”应用上方的文件夹)位于 python 的 module search path 中。

    这是您可能需要在您的网络服务器配置中设置的内容。它在 django shell 中工作的原因可能是因为您在运行 shell 时位于项目的文件夹中。

    如果您将 apache 与 mod_python 一起使用,则会对此进行解释 here

    【讨论】:

    • 您没有任何特殊的本地配置设置吗? (例如,由 settings.py 调用的“local_settings.py”)
    • 我目前正在使用 FastCGI。我的 python 路径包含我的 django_projects 文件夹,该文件夹还包含 /mysite/dtms。
    • 您需要“dtms”正上方的文件夹位于 python 路径中,以便“from dtms.whatever”工作。
    • 没关系,看起来问题仍然存在,但是现在它说全局名称未定义,本质上是一样的。有什么想法吗?
    【解决方案4】:

    我可以解决这个问题,但你设置 DJANGO_SETTINGS_MODULE 环境变量了吗?它会影响您可以导入的内容。将其设置为“.settings”。当你启动 manage.py 时,它也会被设置,所以在其他情况下,事先设置变量是行不通的。

    这是我在我的系统上所做的:

    export DJANGO_SETTINGS_MODULE=<project name>.settings
    

    import os
    os.environ['DJANGO_SETTINGS_MODULE']='<project name>.settings'
    

    对不起,如果这没有抓住重点,但是当我听到导入 models.py 的问题时,我立即想到了环境变量。此外,项目目录必须在 PYTHONPATH 上,但您可能已经知道了。

    【讨论】:

      猜你喜欢
      • 2021-07-06
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 2023-03-26
      • 2012-09-27
      • 2022-12-18
      • 1970-01-01
      相关资源
      最近更新 更多