2013-11-13 2 views
1

Я работаю над проектом, который использует whoosh. Я хочу оставить исходное дерево whoosh на месте и иметь возможность импортировать с более высоких уровней.python - Deep import

Место фактического модуля Свист:

project\libs\whoosh\src\whoosh 

Я хотел бы импортировать как:

import libs.whoosh 
import libs.whoosh.index 
etc. 

Он достаточно прост, чтобы преобразовать каждый подкаталог в модуль питона, помещая __init__.py файл который импортирует следующий подкаталог.

Проблема, однако, заключается в том, что whoosh's __init__.py не раскрывает ни один из его подмодулей. Поэтому import libs.whoosh.index работает только тогда, когда whoosh находится в системном пути; это ограничение, я не хочу манипулировать системным путем и не устанавливать whoosh в пакеты сайта.

Обычно (когда whoosh находится на системном пути), кажется, что внутренние импортные данные whoosh указаны полностью; т.е. от project\libs\whoosh\src\whoosh\index.py:

from whoosh import __version__ 
from whoosh.legacy import toc_loaders 
from whoosh.compat import pickle, string_type 
from whoosh.fields import ensure_schema 

наследия, Compat и поля являются всеми братскими индексировать. Импорт whoosh через цепочку из whoosh\src\whoosh нарушает схему импорта.

Как я могу идти об этом без:

  • установка Свист
  • манипулируя системы путь
+0

, если вы не хотите, чтобы «манипулировать путь системы, а также установки в свист сайта-пакеты», а затем использовать virtualenv. Взлом системы пакетов приносит больше проблем, чем загрязнение сайтов-пакетов –

+0

Но я определенно хочу «взломать систему пакетов». – dilbert

ответ

0

Вы можете использовать добавить свой путь модуля в переменной окружения PYTHONPATH либо постоянно или перед запуском код.

setenv PYTHONPATH $PYTHONPATH:project\libs\whoosh\src 

Или вы могли бы сделать это в коде:

sys.path.append('project\libs\whoosh\src') 
+0

Я знаю об этом, однако это явно хочет, я не хотел этого делать. – dilbert

+0

Тогда вы могли бы добавить 'whoosh \ src \ whoosh' как whoosh в свой проект, поэтому вам не потребуется ни устанавливать этот модуль, ни манипулировать системным путем. – scriptmonster