проблемы с относительным импортом - PullRequest
3 голосов
/ 25 февраля 2011

РЕДАКТИРОВАТЬ: from __future__ import absolute_import доступно в IronPython? Я только что понял, хотя все, что я использую, это только Python, проект в целом находится на IronPython.

Я пытаюсь использовать относительный импорт (вместо добавления в sys.path). Вот моя структура каталогов:

-src
  |
  -runners
    |
    -__init__.py
    -clippyRunner.py
  |
  -__init__.py
  -clippy.py
  -irondb.py
  -ironxl.py

теперь, в clippyRunner.py, я хочу импортировать clippy, который, как вы можете видеть, находится в родительском каталоге src. так что я сделал это:

from __future__ import absolute_import
from ...src import clippy

но это дает мне эту ошибку:

ValueError: Attempted relative import in non-package

я тоже пробовал

from ..src import clippy

с теми же результатами.

что я тут не так делаю?

РЕДАКТИРОВАТЬ: Я также пытался import ..clippy что просто дает мне: SyntaxError: unexpected token '.'

Ответы [ 2 ]

1 голос
/ 26 февраля 2011

Сообщение об ошибке, которое вы получаете, говорит о том, что IronPython принимает синтаксис, но считает, что вы в настоящее время не запускаете код внутри пакета.

Поскольку вы получаете '__main__' вместо 'src.runners.clippyRunner' при печати __name__, это говорит мне о том, что вы запускаете /src/runners/clippyRunner.py непосредственно из командной строки. Как вы видели, это нарушает относительный импорт, так как Python не знает, где находится модуль в иерархии пакетов.

В CPython вы можете справиться с этой ситуацией, используя командную строку python -m src.runners.clippyRunner из каталога, содержащего пакет src, чтобы убедиться, что интерпретатор знает правильное расположение уязвимого модуля.

Я не знаю, имеет ли текущая версия IronPython эквивалентный механизм (CPython исправил его, только когда PEP 366 был включен в версию 2.6)

1 голос
/ 25 февраля 2011

Ваш импорт поврежден:

 from .. import clippy
...