在已安装的Python包中导入

在已安装的Python包中导入,python,package,python-import,python-module,Python,Package,Python Import,Python Module,对于已安装的Python包,请考虑以下目录结构: project/ project/ __init__.py file1.py file2.py module/ __init__.py file3.py setup.py 要从file1.py访问file2.py中的函数,可以执行以下操作 from file2 import fun 或 类似地,如果我想从file1.

对于已安装的Python包,请考虑以下目录结构:

project/
    project/
        __init__.py
        file1.py
        file2.py
        module/
            __init__.py
            file3.py
    setup.py
要从
file1.py
访问
file2.py
中的函数,可以执行以下操作

from file2 import fun

类似地,如果我想从
file1.py
访问
file3.py
中的函数,我可以从project.module.file3导入函数执行
,或者从.module.file3导入函数执行


这两个选项似乎是等效的。这两种方法之间是否有我所缺少的首选方法或相关差异

尽管这主要是个人偏好的问题,但PEP8建议使用绝对进口:

from project.module.file3 import function 
from .module.file3 import function
而不是相对进口:

from project.module.file3 import function 
from .module.file3 import function
绝对导入更具可读性和更好的行为(失败时更好的错误消息)。但是,当使用绝对导入变得不必要的冗长时(根据您的判断),使用相对导入是一种可以接受的选择。在进口上看到这个