mod_wsgi: импортировать модули Python с тем же именем - PullRequest
2 голосов
/ 09 июля 2011

Это дополнительный вопрос к импорту модулей Python с тем же именем , но, поскольку эти два понятия не связаны, вероятно, лучше задать новый вопрос:

У меня естьнесколько проектов Python, и все они имеют пакет conf:

/some_folder/project_1/
  conf/
    __init__.py
    some_source_file.py

/another_folder/project_2/
  conf/
    __init__.py
    another_source_file.py

Для каждого проекта я создал файл .pth в папке site-packages со следующим содержимым:

.../site-packages/project_1.pth:
import sys; sys.path.append('/some_folder/project_1/')

.../site-packages/project_2.pth:
import sys; sys.path.append('/another_folder/project_2/')

Теперь доступ к модулю conf работает для / some_folder / project_1 /:

import conf.some_source_file

, но не для / another_folder / project_2 /:

import conf.another_source_file
AttributeError: 'module' object has no attribute 'another_source_file'

, что, вероятно, связано с тем, что python ищет толькоПервый путь к conf под любыми папками в sys.path.

Поэтому я превратил project_1 и project_2 в пакеты python и добавил символическую ссылку в любой из них, чтобы я мог получить полный доступ к обоим пакетам conf:

/some_folder/project_1/
  __init__.py
  project_1 <-- symlink to .
  conf/
    __init__.py
    some_source_file.py

/another_folder/project_2/
  __init__.py
  project_2 <-- symlink to .
  conf/
    __init__.py
    another_source_file.py

В обычном скрипте Python я теперь могу импортировать модули из обоих пакетов conf:

import project_1.conf.some_source_file
import project_2.conf.another_source_file

Однако , когда я пытаюсь сделать то же самое в приложении WSGIUСпойте модуль Apache mod_wsgi, импорт не выполняется для второго проекта.В частности, «стартовый файл» wsgi (то есть файл с суффиксом wsgi, на который ссылается оператор WSGIScriptAlias ​​в файле конфигурации Apache для моего виртуального сервера) успешно импортирует модуль в / another_folder / project_2 /, который, в свою очередь, импортирует project_2 / conf / another_source_file.py.

Второй импорт завершается неудачно, несмотря на то, что / another_folder / project_2 / находится в sys.path.Приложение WSGI работает в режиме демона.

Как мне это отсортировать?

1 Ответ

0 голосов
/ 11 июля 2011

FWIW, это было рассмотрено в списке рассылки mod_wsgi, и из памяти оказалось, что оно вызвано присутствием как модуля, так и пакета с одинаковым именем, и неправильно выбирало.

...