Проблемы с импортом пакетов в Python - PullRequest
5 голосов
/ 27 апреля 2011

Моя структура такова:

companynamespace/
  __init__.py
  projectpackage/
    __init__.py
    somemodule.py

companynamespace/__init__.py пусто

projectpackage/__init__.py имеет следующую строку:

import companynamespace.projectpackage.somemodule as module_shortname

Когда я открываю питонаконсоль и введите import companynamespace.projectpackage (PYTHONPATH настроен правильно для этого), я получаю AttributeError: 'module' object has no attribute 'projectpackage' в строке import companynamespace.projectpackage.somemodule as module_shortname.Если я удаляю часть as module_shortname (и делаю все необходимые замены в остальной части файла), все импортируется правильно.

Может кто-нибудь сказать мне, почему это так?Мой Google-Fu меня подводит.

Ответы [ 2 ]

5 голосов
/ 27 апреля 2011

Нет необходимости в абсолютном импорте в projectpackage/__init__.py, делайте относительный

import somemodule as module_shortname

То, как вы это делаете (с абсолютным импортом), приведет к циклическому импорту, который неочень хорошо работают в Python.Когда вы импортируете модуль, вы также вызываете __init__.py родительских модулей.В вашем случае с абсолютным импортом вы также звоните projectpackage/__init__.py в projectpackage/__init__.py.

1 голос
/ 27 апреля 2011

Что ж, в соответствии с PEP 221 ваш код кажется законным.Это может быть ошибка.Следующий обходной путь, который эквивалентен этому выражению, работает для меня (Python 2.6.6):

from companynamespace.projectpackage import somemodule as module_shortname

Надеюсь, это поможет.

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