2009-09-14 5 views
0

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

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

где мои модели, item_list и просмотр файлов в/MySite/ЦМР/

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

Кроме того, когда я использую оболочку 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/ЦМР/item_list.py. Означает ли это, что он загружается? Я вижу, что модуль dtms загружается, но он до сих пор не может найти dtms.models

+0

Итак, одна из моих моделей определяются как: класса Item_list(): ла Когда я делаю это, на моем ноутбуке, python2.5 в состоянии сделать: из dtms.item_list import Item_list Когда я вынимаю() после Item_list из-за проблем с совместимостью с python2.4, эта строка не работает в python2 0,5. Может ли что-то происходить с этим на python2.4? – victor

ответ

4

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

Мой общий совет в вопросах импорта является кронштейн проблемного импорта с 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 - это не то, что, по вашему мнению, было бы, и/или бла находится в каком-то странном месте или с странным путем и т. П.

+0

Знаете ли вы, как я могу получить этот вывод, когда я запускаю django на настройке fastcgi? Я понятия не имею, на что он мог бы напечатать что угодно. – victor

0

Убедитесь, что ваш проект (или папка над вашим приложением «dtms») находится в module search path python.

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

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

+0

/mysite есть. Он ищет рекурсивно, не так ли? – victor

+0

У вас нет специальных настроек локальной конфигурации? (например, «local_settings.py», вызываемый параметрами settings.py) – Fragsworth

+0

Я использую FastCGI на данный момент. И мой путь python содержит мою папку django_projects, которая также содержит/mysite/dtms. – victor

0

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

нет, он установлен правильно. – victor

2

Чтобы проверить вашу систему.путь, который вы можете сделать то, что сказал Алекс, но вместо того, чтобы использовать печать можно использовать модуль ведения журнала:


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') 
Смежные вопросы