Невозможно импортировать файл в Python / Django - PullRequest
0 голосов
/ 14 сентября 2009

Я не уверен, что происходит, но на моем ноутбуке все работает нормально. Когда я загружаю на свой хост с Python 2.3.5, мой views.py не может найти ничего в моем models.py. У меня есть:

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

где мои модели, item_list и файлы представлений находятся в / mysite / dtms /

В конечном итоге он говорит мне, что не может найти пользователя. Есть идеи?

Кроме того, когда я использую оболочку django, я могу сделать "из импорта dtms.models *", и он работает просто отлично.

Хорошо, после выполнения приведенного ниже предложения я получаю файл журнала:

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 ]

4 голосов
/ 14 сентября 2009

Тот факт, что from X import * работает, не гарантирует, что from X import Wowie тоже будет работать, вы знаете (если бы вы могли отучиться от этой import * зависимости, вы бы НАМНОГО были счастливее в долгосрочной перспективе, но это другая проблема; -).

Мой общий совет по проблемам импорта - заключить в скобки проблемный импорт с помощью try / исключением:

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 не тот, о котором вы думали, и / или бла в каком-то странном месте или со странным путем, и тому подобное.

2 голосов
/ 14 сентября 2009

Чтобы проверить ваш sys.path, вы можете сделать то, что сказал Алекс, но вместо использования 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')
0 голосов
/ 14 сентября 2009

Я мог бы быть в стороне от этого, но вы уже установили переменную окружения 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, но вы, вероятно, уже знаете это.

0 голосов
/ 14 сентября 2009

Убедитесь, что ваш проект (или папка над приложением "dtms") находится в поисковом модуле Python .

Это то, что вам может потребоваться настроить в конфигурации вашего веб-сервера. Причина, по которой он работает в оболочке django, возможно, в том, что вы находитесь в папке вашего проекта, когда запускаете оболочку.

Это объясняется здесь , если вы используете apache с mod_python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...