При установке django-piston из репозитория bitbucket с помощью pip я заметил нечто странное (первая строка с отступом выход):
$ 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 не будет устанавливать __init__.py
поршня, указывая на то, что это связано с тем, что «поршень» указан как один из namespace_packages
в setup.py
.
Далее, когда я заглянул внутрь файла "django_piston-0.2.3rc1-nspkg.pth", я нахожу это, что кажется попыткой "виртуальных пакетов":
# 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)
Я вижу, что он здесь делает; это в основном создание «фальшивого модуля», где поршень должен быть, который по существу объединяет все подмодули поршня.
Кажется, это отлично работает для работы из командной строки (я могу импортировать поршень из оболочки django [хотя его репр <module 'piston' (built-in)>
], и все работает нормально с runserver.), но мой проект, работающий на apache mod_wsgi, выдает 500 ошибка на каждой странице, потому что "Нет модуля с именем поршень. обработчик".
Я исключил проблемы с путями Python; каталог site-packages находится в пути для всех попыток. Я не знаю других причин, по которым это могло бы вести себя так, есть идеи?