2013-07-20 1 views
3

У меня есть несколько пакетов Python, которые я хотел бы хранить в отдельных файловых системах, но, к сожалению, имеют одно и то же имя модуля верхнего уровня.Хранение пакетов Python с тем же именем верхнего уровня в разных каталогах

Для иллюстрации, структура каталогов выглядит следующим образом:

/fs1 
    /top 
    __init__.py 
    /sub1 
     __init__.py 

/fs2 
    /top 
    __init__.py 
    /sub2 
     __init__.py 

В Python 2.7, есть ли способ я могу настроить мой PYTHONPATH, так что я мог бы импортировать как top.sub1 и top.sub2 в тот же сценарий? Добавление /fs1 и /fs2 не работает, поскольку оно позволяет импортировать один из двух подмодулей (в зависимости от того, что наступит раньше на PYTHONPATH).

Я мог бы скопировать/обозначить два дерева в одном, но по практическим соображениям я бы предпочел не делать этого.

+2

Да, есть способ, и это называется "пространства имен пакетов". http://stackoverflow.com/questions/1675734/how-do-i-create-a-namespace-package-in-python Обратите внимание, что если вы это сделаете, пакет 'top' должен быть пустым, это пространство имен не может содержат что-либо, кроме пакетов sub1 и sub2. –

ответ

0

Есть несколько вариантов, один из которых является imp:

import imp 

foo = imp.load_source('module.name', '/path/to/file.py') 
foo.MyClass() 

(my source)


Другой с importlib

Relative:

importlib.import_module('.sub1', 'fs1.top') 

Абсолютные:

importlib.import_module('fs1.top.sub1') 

(my source)

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