Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python relative import with more than two dots

Is it ok to use a module referencing with more than two dots in a path? Like in this example:

# Project structure:
# sound
#     __init__.py
#     codecs
#         __init__.py
#     echo
#         __init__.py
#         nix
#             __init__.py
#             way1.py
#             way2.py

# way2.py source code
from .way1 import echo_way1
from ...codecs import cool_codec

# Do something with echo_way1 and cool_codec.

UPD: Changed the example. And I know, this will work in a practice. But is it a common method of importing or not?

like image 983
Ivan Velichko Avatar asked Sep 04 '15 10:09

Ivan Velichko


People also ask

What does two dots mean in Python?

A single dot means that the module or package referenced is in the same directory as the current location. Two dots mean that it is in the parent directory of the current location, in other words the directory above.

How do you resolve Valueerror attempted relative import beyond top level package?

The beyond top level package error in relative import error occurs when you use a relative import without the file you are importing being part of a package. To fix this error, make sure that any directories that you import relatively are in their own packages.

What is absolute import Python?

Absolute imports in Python Absolute import involves a full path i.e., from the project's root folder to the desired module. An absolute import state that the resource is to be imported using its full path from the project's root folder.


1 Answers

update Nov. 24,2020

If you wanna dig deeper in python's relative-import, I strongly recommend you this answer.


Is it ok to use a module referencing with more than two dots in a path?

Yes. You can use multiple dots in relative import path, but it is only feasible when using from xxx import yyy syntax, not import xxx syntax. Moreover, single dot, two dots and three dots mean current directory, parent directory and grandparent directory respectively, and so on.

And I know, this will work in a practice. But is it a common method of importing or not?

It depends. If your project has complex directory structure, using absolute import would be "disgusting". For example,

from sub1.sub2.sub3.sub4.sub5 import yourmethod

. In this case, using relative import will make your code clean and neat. Maybe look like

from ...sub5 import yourmethod
like image 177
HuihuangZhang Avatar answered Sep 22 '22 08:09

HuihuangZhang