Проблема
При попытке выполнить одну из моих пользовательских команд управления Django (send_notify_emails
) я получаю следующую ошибку:
$ python web_apps/manage.py send_notify_emails
Traceback (most recent call last):
File "web_apps/manage.py", line 11, in <module>
execute_manager(settings)
File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 436, in execute_manager
setup_environ(settings_mod)
File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 419, in setup_environ
project_module = import_module(project_name)
File "/usr/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
ImportError: No module named my_django_app-1.0
Фон
У меня есть сайт Django с двумя приложениями.Путь к каталогу сайта (который включает в себя каталоги модулей приложения, а также settings.py, urls.py и manage.py) составляет /srv/web_apps
.Это символическая ссылка на /usr/share/my_django_app-1.0
, которая является svn export
тега выпуска продукта.Таким образом, я могу изменить версию своего приложения, просто переместив символическую ссылку на путь для новой рабочей версии, и, при необходимости, легко вернуться к более раннему выпуску.
Мой django.wsgi
файл добавляет /srv
и /srv/web_apps
к пути Python, чтобы mod_wsgi
мог найти мои настройки и файлы url, а также модули приложения.
ЕДИНСТВЕННОЕ место, где появляется my_django_app-1.0
, это путь к каталогу, онего нет нигде в моем settings.py
или где-либо еще, поэтому Django должен получать имя модуля по пути.
То, что , по-видимому, происходит, - Django разрешает имя пакета для моего приложения.следуя по символической ссылке и используя имя целевой папки, вместо самой символической ссылки.Когда я запускаю manage.py
, Django пытается импортировать my_django_app-1.0
, когда он должен импортировать web_apps
.