Lors de l'installation django-piston du repo bitbucket avec pépin, j'ai remarqué quelque chose de bizarre (de première ligne en retrait de la sortie):projet Django (apache, mod_wsgi) ne peuvent pas importer des packages d'espace de noms
$ pip install hg+http://bitbucket.org/jespern/django-piston
Downloading/unpacking hg+http://bitbucket.org/jespern/django-piston
Cloning Mercurial repository http://bitbucket.org/jespern/django-piston to /tmp/pip-v1h8Sh-build
Running setup.py egg_info for package from hg+http://bitbucket.org/jespern/django-piston
Installing collected packages: django-piston
Running setup.py install for django-piston
Skipping installation of [venv]/lib/python2.6/site-packages/piston/__init__.py (namespace package)
Installing [venv]/lib/python2.6/site-packages/django_piston-0.2.3rc1-py2.6-nspkg.pth
Successfully installed django-piston
Cleaning up
Pip ne sera pas installer le piston __init__.py
, indiquant que c'est parce que «piston» est spécifié comme l'un des namespace_packages
dans le setup.py
.
De plus, quand je regardais à l'intérieur du « django_piston-0.2.3rc1-nspkg.pth » fichier, je trouve cela, ce qui semble être une tentative de « paquets virtuels »:
# File: [virtualenv]/lib/python2.6/site-packages/django_piston-0.2.3rc1-py2.6-nspkg.pth
# Originally all on one line; broken apart here for readability.
import sys,new,os;
p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('piston',));
ie = os.path.exists(os.path.join(p,'__init__.py'));
m = not ie and sys.modules.setdefault('piston',new.module('piston'));
mp = (m or []) and m.__dict__.setdefault('__path__',[]);
(p not in mp) and mp.append(p)
Je peux voir ce qu'il fait ici; c'est en fait la création d'un "faux module", où le piston devrait être be, qui agrège essentiellement tous les sous-modules du piston.
Cela semble fonctionner correctement pour le travail en ligne de commande (je peux importer le piston du shell django [bien que sa repr soit <module 'piston' (built-in)>
], et les choses semblent fonctionner correctement depuis runserver.), Mais mon projet, fonctionnant sur apache mod_wsgi , renvoie une erreur 500 sur chaque page, car il n'y a "aucun module nommé piston.handler". J'ai exclu les problèmes de chemin python; le répertoire site-packages est dans le chemin pour toutes les tentatives. Je ne sais pas d'autres raisons pour lesquelles il se comporterait comme ça, des idées?