Импорт модуля Python-явный и неявный относительный импорт

вчера вечером, при работе на моем mac, я настроил некоторые модули импорта в моем __init__.py ' s

from MongoProvider import MongoProvider
from Settings import Settings

etc. Я не уверен, какая версия Python находится на этой машине. Я отредактирую вопрос позже с этой информацией, как только она у меня будет.

сегодня, работая на другой машине, которая является Windows, и используя Python 3.3.3, мой импорт модулей был нарушен. Добавив явный относительный импорт (добавив ведущую точку), я смог исправить эту проблему.

from .MongoProvider import MongoProvider
from .Settings import Settings

в след, который я получаю:

Traceback (most recent call last):
File "app.py", line 5, in <module> from modules.route_handlers import Route_Handlers
File "C:Userswillbbearded-dubstepmodulesroute_handlersRoute_Handlers.py", line 9, in <module> from modules.backend_providers import Settings
File "C:Userswillbbearded-dubstepmodulesbackend_providers__init__.py", line 1, in <module> from MongoProvider import MongoProvider
ImportError: No module named 'MongoProvider'

мой макет проекта

root
|_modules
  |_api_helpers
    | __init__.py
    | InvalidUsage.py
    | response_utils.py
  |_backend_providers
    | __init__.py
    | MongoProvider.py
    | Settings.py
  |_route_handlers
    | __init__.py
    | Route_Handlers
| app.py

есть идеи, что может вызвать это? Есть ли файл конфигурации, на который я должен смотреть?

2 ответов


Ну, согласно PEP-8 импорт:

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

поскольку Python 3.3 вызывает у вас проблемы, делая вас явными модулями импорта родственников, я предполагаю, что это объясняет ситуацию. Вероятно, на Mac у вас есть Python 2.х, вот почему он там работает.

смотреть на распределение файлов вашего проекта, Settings.py и MongoProvider несколько действительно относительные модули. Это означает, что удаление неявный относительный импорт в Python 3 вызывает у вас проблемы, потому что система импорта не может найти модуль:

ImportError: No module named 'MongoProvider'

кажется, что версия Python на вашем mac равна 2.x в то время как Python в вашей windows-3.x.

Я столкнулся с той же проблемой перед использованием модуля tkinter (который является Tkinter в Python 2.икс.)

кажется, что нам нужно использовать из XXX.xxx импорт xxx для импорта...﹏●●

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