2010-08-26 26 views
3

J'ai ce problème et ça me gêne! Je développe donc ma première vraie application Google App Engine et j'aime toujours découvrir des choses tout en écrivant des tests.Nez/Nosegae: Problèmes d'importation

J'ai donc la configuration suivante:
J'ai un virtualenv avec nez, nosegae, webtest et gaetestbed. Ça s'appelle porksvr.

activer mes virtualenv comme ceci:

source porksvr/bin/activate 

Pour exécuter nez-je utiliser la commande suivante:

nosetests --with-gae --gae-lib-root /home/fs/gae 

Cela me donne l'erreur suivante

DEBUG: Access to module file denied: 
/home/fs/work/gaecode/porksvr/lib/python2.6/site-packages/webtest 

Donc au début Je pensais "ok, le nez exécute l'application dans le 'contexte' du dev_appserver donc il ne sait pas w à propos du webtest ". Mais pour être sûr que j'ai créé un nouveau répertoire et ajouté une petite application GAE. Il est à seulement 3 fichiers:
-main.py
-app.yaml
-test_huh.py (importations module webtest.)

Maintenant, ce qui m'a vraiment confus est que cela fonctionne. Je cours les cms nosetests et il passe mes tests.

J'ai donc commencé à creuser dans mon application pour trouver ce qui pourrait être différent, mais j'ai vraiment frappé un mur. J'ai d'abord pensé que cela pourrait être un problème d'autorisation puisque l'erreur dit "accès ... refusé" mais je ne pouvais pas vraiment trouver quelque chose de spécial. Ensuite j'ai pensé que c'était peut-être parce que j'avais créé mon application avant le virtualenv mais je ne pouvais pas vraiment voir comment cela pouvait être un problème.

Donc, si quelqu'un a une idée pourquoi cela arrive, je serais vraiment reconnaissant.

+0

J'ai récemment trouvé ce qui pourrait être un problème plus profond avec NoseGAE, 'dev_appserver.py' et (de toutes choses) le module python' imp'. Vous pouvez le reproduire à partir de mon [Gist Repo] (https://gist.github.com/883676#file_readme.md). Fondamentalement, il semble que le module 'imp', qui' dev_appserver.py' (et donc le plugin NoseGAE lui-même) tous deux s'appuient lourdement, ne se comporte pas exactement parallèlement aux importations standard de python.Cela a malheureusement l'effet secondaire que les instances de module dans 'sys.modules' ne reçoivent pas toujours des attributs pointant vers leurs modules enfants. Il en résulte des problèmes d'importation confus et imprévisibles. –

Répondre

2

Excellent après des heures d'essais, je viens de résoudre mon problème après avoir posé cette question.

Qu'est-ce qui a été fixé pour créer le virtualenv avec le commutateur suivant --no-site-packages. Apparemment, j'avais une copie de webtest dans le système Python de mon système qui a causé des problèmes avec mon virtualenv. J'aurais dû le remarquer quand j'ai essayé de pip installer webtest dans mon virtualenv et il a dit qu'il existait déjà.

Toujours pas 100% sûr pourquoi certaines applications ont fonctionné et d'autres pas.