2009-09-14 9 views
0

Je ne suis pas sûr de ce qui se passe, mais sur mon propre ordinateur portable, tout fonctionne bien. Lorsque je télécharge sur mon hôte avec Python 2.3.5, mon fichier views.py ne trouve rien dans mon fichier models.py. J'ai:Impossible d'importer le fichier en Python/Django

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

où mes modèles, item_list et fichiers vues sont/monsite/dtms/

Il finit par me dire qu'il ne peut pas trouver l'utilisateur. Des idées?

Aussi, quand j'utilise le shell django, je peux faire "à partir de dtms.models import *" et ça marche très bien.

D'accord, après avoir fait la suggestion ci-dessous, je reçois un fichier journal:

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

Je ne suis pas tout à fait sûr de ce que cela signifie - mon dossier est en monsite/dtms/item_list.py. Cela signifie-t-il qu'il est chargé? Je vois le module dtms est en cours de chargement, mais il ne peut toujours pas trouver dtms.models

+0

D'accord, donc l'un de mes modèles est défini comme: classe item_list(): bla bla Quand je fais ceci, sur mon ordinateur portable, python2.5 est capable de faire: de dtms.item_list importer Item_list quand je sors le() après Item_list, en raison de problèmes de compatibilité avec python2.4, cette ligne ne fonctionne pas dans python2 .5. Quelque chose pourrait-il se passer avec python2.4? – victor

Répondre

4

Le fait que from X import * œuvres ne garantit pas que from X import Wowie fonctionnera aussi, vous savez (si vous pourriez vous sevrer de cette dépendance import * vous seriez plus heureux FAÇON sur le long terme, mais c'est une autre question ;-) .

Mon conseil général des problèmes d'importation est de placer entre crochets l'importation problématique avec 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 

et similaires. Cela vous montre généralement assez rapidement que votre sys.path n'est pas ce que vous pensiez que ce serait, et/ou blah est à un endroit étrange ou avec un chemin étrange, et ainsi de suite.

+0

Savez-vous comment je pourrais obtenir cette sortie quand je cours django sur une installation de fastcgi? Je n'ai aucune idée de l'endroit où j'imprimerais quoi que ce soit. – victor

0

Assurez-vous que votre projet (ou le dossier au-dessus de votre "dtms" app) est dans python module search path.

Ceci est quelque chose que vous devrez peut-être définir dans la configuration de votre serveur Web. La raison pour laquelle cela fonctionne dans le shell django est probablement parce que vous êtes dans le dossier de votre projet lorsque vous exécutez le shell.

Ceci est expliqué here si vous utilisez apache avec mod_python.

+0

/mysite est là. Il recherche récursivement, non? – victor

+0

Vous n'avez pas de paramètres de configuration locaux spéciaux, n'est-ce pas? (par exemple "local_settings.py" qui est appelé par settings.py) – Fragsworth

+0

J'utilise FastCGI pour le moment. Et mon chemin python contient mon dossier django_projects, qui contient aussi/mysite/dtms. – victor

0

Je pourrais être loin avec ceci, mais avez-vous placé la variable d'environnement DJANGO_SETTINGS_MODULE encore? Cela affecte ce que vous pouvez importer. Réglez-le sur ".settings". C'est aussi quelque chose qui se règle lorsque vous lancez le fichier manage.py, donc les choses fonctionnent ici et ne fonctionneront pas dans d'autres situations avec la définition préalable de la variable.

Voici ce que je fais sur mon système:

export DJANGO_SETTINGS_MODULE=<project name>.settings 

ou

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

Désolé si ce manque le point, mais quand j'entends des problèmes d'importation models.py, je me suis immédiatement chose de l'environnement variables En outre, le répertoire du projet doit être sur PYTHONPATH, mais vous le savez probablement déjà.

+0

non, c'est réglé correctement. – victor

2

Pour vérifier votre système.chemin que vous pouvez faire ce que Alex a dit, mais au lieu d'utiliser l'impression que vous pouvez utiliser le module d'enregistrement:


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