python __import __ () импортирует из 2 разных каталогов, когда один и тот же модуль существует в 2 местах - PullRequest
1 голос
/ 05 января 2011

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

-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(обратите внимание, что подмодуль 1 и 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 могут решить эту проблему для меня?

1 Ответ

3 голосов
/ 05 января 2011

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

from submodule import mymodule

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...