Python中的相对导入正确的语法和要求

Python中的相对导入正确的语法和要求,python,Python,我知道这匹马被鞭打过无数次,但没有一个答案能回答我的问题 我的文件夹结构如下 /pdocs __init__.py (empty) file1.py tester.py Test/ __init__.py (empty) file2.py class file1: def sayhi(): print "hi from parent" from ... import file1 class file2:

我知道这匹马被鞭打过无数次,但没有一个答案能回答我的问题

我的文件夹结构如下

/pdocs
    __init__.py (empty)
    file1.py
    tester.py
    Test/
        __init__.py (empty)
        file2.py
class file1:
    def sayhi():
        print "hi from parent"
from ... import file1
class file2:
    def sayhitoo():
        print "Hi from child"
from Test.file2 import file2
sayhi()
sayhitoo()
file1.py如下所示

/pdocs
    __init__.py (empty)
    file1.py
    tester.py
    Test/
        __init__.py (empty)
        file2.py
class file1:
    def sayhi():
        print "hi from parent"
from ... import file1
class file2:
    def sayhitoo():
        print "Hi from child"
from Test.file2 import file2
sayhi()
sayhitoo()
file2.py如下所示

/pdocs
    __init__.py (empty)
    file1.py
    tester.py
    Test/
        __init__.py (empty)
        file2.py
class file1:
    def sayhi():
        print "hi from parent"
from ... import file1
class file2:
    def sayhitoo():
        print "Hi from child"
from Test.file2 import file2
sayhi()
sayhitoo()
tester.py如下所示

/pdocs
    __init__.py (empty)
    file1.py
    tester.py
    Test/
        __init__.py (empty)
        file2.py
class file1:
    def sayhi():
        print "hi from parent"
from ... import file1
class file2:
    def sayhitoo():
        print "Hi from child"
from Test.file2 import file2
sayhi()
sayhitoo()
尝试运行tester.py我得到

"from ... import file1"
"ValueError: Attempted relative import beyond toplevel package"

这意味着什么。我应该更改什么?

您正在尝试从“两级向上”导入-这就是
中的三个点的意思。您只是从一级导入,因此请使用


还有其他问题——例如,在导入
file2
之后,您可以调用
file2.sayhitoo()
,但是您试图调用的是一个裸字(不合格的)
sayhitoo
,它将不起作用(我预测会出现
名称错误
)。相同,平方,尝试调用bareword
sayhi
。但是,除了你要问的错误之外,还有更多的错误:-)。

是的,是的,我意识到了。我只是快速地将tester.py组合在一起。我知道这不是没有错误的。在任何情况下,从导入工作中删除所有点。这是怎么回事?我明白了。这些init.py只是定义了一个目录层次结构,根文件夹是默认路径。访问我们需要的任何子文件夹都使用点符号。如果您位于pdocs的父目录中,并将pdocs作为包导入,
>>来自pdocs导入测试仪,
来自。。导入
file2.py中的
将起作用(您将得到
name错误:未定义名称“sayhi”
)。如果您不是从
pdocs
包导入
tester
,而是直接用Python解释器运行它,或者您在
pdocs
目录中启动,那么
pdocs
包在该Python运行中永远不会在内存中构建,因此
file2
无法从“父包”导入
pdocs
。。。因为没有这样的父包:-)啊。。知道了。谢谢亚历克斯:)