2015-10-01 2 views
2

Я работаю над проектом, который требует наличия нескольких модулей с тем же именем. Это представитель экстракт архитектуры, с __init__.py файлов, чтобы показать, какие папки являются модули:Python: импорт другого модуля с тем же именем

/path1 
    /ProjectA 
     __init__.py 
     /src 
      __init__.py 
      /ctrl 
       __init__.py 
       somectrl.py 
      ... 
/path2 
    /ProjectA 
     __init__.py 
     /src 
      __init__.py 
      someclass.py 

И в моем классе someclass.py, я хочу импортировать somectrl.py так:

from ProjectA.src.ctrl import somectrl 

Но импорт не удалось: он говорит мне, что нет ctrl. Похоже, он просто смотрит на ProjectA от path2 и полностью игнорирует ProjectA от path1! Оба path1 и path2 находятся в моем PYTHONPATH. Разве они не могут быть достигнуты?

Есть ли чистый выход из этой неприятной ситуации?

+2

За исключением создания пакетов «path1» и «path2» самостоятельно, я не вижу здесь большого количества решений. –

+5

* «Я работаю над проектом, который требует наличия нескольких модулей с тем же именем» * - хорошо, что есть ваша проблема. – jonrsharpe

+0

jonrsharpe - я хорошо знаю, что сама проблема - проблема :) – Rinita

ответ

4

Один из способов - использовать модуль imp.

import imp 
somectrl = imp.load_source("somectrl", "path1/ProjectA/src/ctrl/somectrl.py") 
someclass = imp.load_source("someclass", "path2/ProjectA/src/someclass.py")