2010-02-17 4 views
3

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

modules/check/lib/check.py 
modules/edit/lib/edit.py 

Во время установки файлы Python помещены в том же самом каталог program_name под Python's site-packages. Поэтому все модули используют синтаксис import program_name.edit.

Из-за структуры каталога и импорта исходные модули не могут импортировать друг друга, поэтому вам придется устанавливать их каждый раз, когда вы хотите что-либо запускать в исходном дереве.

Мои вопросы таким образом: Без изменения структуры каталогов, как я могу убедиться, что modules/check/lib/check.py импорт из modules/edit/lib/edit.py и что site-packages/program_name/check.py импорт из site-packages/program_name/edit.py? А для возможной реорганизации, каковы наилучшие практики для структуры каталогов и импорта в такой среде?

ответ

2

Вы можете просто добавить /modules/ к вашему PYTHONPATH в своей среде разработки. После установки в сайт-пакеты, вызывающий import edit внутри check.py импортирует правильный модуль, так как они находятся в одном каталоге. Вызов import edit из вашего dev environment импортирует тот, который вы добавили в свой PYTHONPATH

+0

edit.py и check.py находятся не в том же каталоге. – l0b0

+0

, пожалуйста, обновите свой вопрос - он утверждает, что они находятся в site-packages/progam_name/check.py и site-packages/program_name/edit.py, правильно? –

+0

Если вы добавляете 'modules/check/lib /' и 'modules/edit/lib /' в свой PYTHONPATH, вы можете вызвать 'import check' и' import edit' –

0

Почему вы не устанавливаете символические ссылки под prog_name на вашем компьютере-разработчике?

+0

Тогда мне пришлось бы поддерживать символические ссылки на каждый файл Python в исходном дереве. Кроме того, я хотел бы иметь возможность использовать текущий процесс сборки для получения последних обновлений в 'site-packages' по своему усмотрению, а не всякий раз, когда я что-то обновляю в исходном дереве. – l0b0

+1

Итак, если я правильно понимаю все ваши комментарии, (1) вы не хотите, чтобы исходные версии этих модулей были видны остальной части вашей установки Python - только последняя установленная версия. Также (2) вы не хотите изменять синтаксис импорта в исходных файлах, они должны использовать тот же синтаксис импорта (и без условного импорта, я полагаю), который они используют при установке. Тем не менее (3) исходные модули должны импортировать исходные версии друг друга. Я не думаю, что (1) - (3) являются совместно выполнимыми. – dubiousjim

Смежные вопросы