Я не могу ни за что в жизни заставить относительный импорт 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. Почему имеет место это? Как я заставляю этот пример песочницы работать?
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.