Python-Aren';相对于当前目录的t个包?

Python-Aren';相对于当前目录的t个包?,python,python-3.x,Python,Python 3.x,好的,我有一个如下的文件结构: main.py/ 帕奎特/ __初始值 test1.py 这是我的main.py中的内容: from paquete import testFunc def main(): testFunc() if __name__ == '__main__': main() 这是我在test1.py中得到的: def testFunc(): print("Hello from test1 function!") 这就是我在我的___

好的,我有一个如下的文件结构:

  • main.py/
  • 帕奎特/
    • __初始值
    • test1.py
这是我的main.py中的内容:

from paquete import testFunc


def main():
    testFunc()


if __name__ == '__main__':
    main()
这是我在test1.py中得到的:

def testFunc():
    print("Hello from test1 function!")
这就是我在我的____; init.py中得到的:

from test1 import testFunc
但这不起作用,它说没有名为test1的模块

但是,如果我有以下情况:

from paquete.test1 import testFunc

它工作得很好。但是我不明白,如果它与test1在同一个目录中,为什么我需要在它前面加上目录名,就像我从项目的根级别开始工作一样

您当前使用的称为隐式相对导入。它在Python 3.x中被弃用,这在中提到

您仍然可以使用相对导入;它只需要使用下面描述的,带有前导点:

这些导入使用前导点指示相对导入中涉及的当前包和父包

又a—

相对导入的唯一可接受语法是来自。[module]导入名称的
。所有不以
开头的导入表单都被解释为绝对导入。(政治公众人物0328)


这是因为
paquete
在您的
sys.path
中,但包的内部没有。因此,您可以对
paquete
包进行绝对导入,但只能对其内部进行相对导入
paquete
位于您的
sys.path
上,因为它与您的main.py位于同一目录中

您可以在导入之前设置
\uuuuuu路径\uuuuuu
属性,以获取导入语句要考虑的包内部


看看这个,作为参考

Uhm现在更有意义了。谢谢您的回复。:)我希望我能将两个回答标记为已接受。哈哈,谢谢你的回复,现在一切都变得更有意义了。
# Relative
from .test1 import testFunc

# Absolute
from paquete.test1 import testFunc