2011-01-05 3 views
1

У меня есть приложение python, которое имеет структуру каталогов, подобную этой.python __import __() импортирует из двух разных каталогов, когда тот же модуль существует в 2-х местах

-pythonapp 
    -mainpython.py 
    -module1 
     -submodule1 
      -file1.py 
      -file2.py 

     -submodule2 
      -file3.py 
      -file3.py 

     -submodule3 
      -file1.py 
      -file2.py 
      -file5.py 
      -file6.py 
      -file7.py 

, когда я пытаюсь импортировать утилиты Python (от mainpython.py) под submodule3, я получаю первые 2 файла из submodule1. (Обратите внимание, что submodule1 и 3 имеют 2 разных файлов с тем же именем). Однако тот же импорт отлично работает, когда нет конфликта, то есть он правильно импортирует файл 5,6,7 из подмодуля3.

Вот код:

name=os.path.splitext(os.path.split("module1\submodule3\file1.py")[1])[0] --> file1.py name here is passed dynamically. 

module = __import__(name) 

// Вот это имя, как «file1» он работает (но с выше указанным вопросом, хотя, когда передает имя файла динамически), но если Я передаю полный пакет как «module1.submodule1.file1», он терпит неудачу с помощью ImportError, в котором говорится, что «нет модуля с именем file1»

Теперь вопрос в том, как сказать интерпретатору использовать только те, что указаны в разделе «module1.submodule3» .file2" ? Я использую python

Это действительно актуально, и у меня закончились все попытки. Надеюсь, что некоторые опытные разработчики python могут решить это для меня?

+0

Можете ли вы переформатировать свой вопрос? –

+2

Почему вы используете '__import__'? Почему не просто 'from module1.submodule3 import filex'? – aaronasterling

ответ

3

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

from submodule import mymodule 

Синтаксис. Создание пакетов - хороший способ разделить модули на разные пространства имен. И назовите свои модули в соответствии со своей функциональностью, не используйте их как file1, file2 и т. Д.