Кто-либо может объяснить относительный импорт Python?

Я не могу ни за что в жизни заставить относительный импорт Python работать. Я создал простой пример того, где он не функционирует:

Структура каталогов:

/__init__.py
/start.py
/parent.py
/sub/__init__.py
/sub/relative.py

/start.py содержит просто: import sub.relative

/sub/relative.py содержит просто from .. import parent

Все другие файлы являются пробелом.

При выполнении следования командной строки:

$ cd /
$ python start.py

Я добираюсь:

Traceback (most recent call last):
  File "start.py", line 1, in <module>
    import sub.relative
  File "/home/cvondrick/sandbox/sub/relative.py", line 1, in <module>
    from .. import parent
ValueError: Attempted relative import beyond toplevel package

Я использую Python 2.6. Почему имеет место это? Как я заставляю этот пример песочницы работать?

165
задан carl 16 December 2009 в 23:27
поделиться

1 ответ

You are importing from package "sub". start.py is not itself in a package even if there is a __init__.py present.

You would need to start your program from one directory over parent.py:

./start.py

./pkg/__init__.py
./pkg/parent.py
./pkg/sub/__init__.py
./pkg/sub/relative.py

With start.py:

import pkg.sub.relative

Now pkg is the top level package and your relative import should work.


If you want to stick with your current layout you can just use import parent. Because you use start.py to launch your interpreter, the directory where start.py is located is in your python path. parent.py lives there as a separate module.

You can also safely delete the top level __init__.py, if you don't import anything into a script further up the directory tree.

135
ответ дан 23 November 2019 в 21:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: