解决python相对导入包时出现的一些问题。

1 Python如何相对导入包这份文档已经说得很清楚出了,不清楚的可以看看:python3-cookbook看看自己有没有写错。
2 如果你确定你的写法跟上面文档介绍的一样,但还是报错,那就看你是不是在模块内运行程序。按照上面链接写的模块包被外部程序导入时是没有任何问题的,但如果你直接在模块内运行代码,这种相对导入就会出现问题,就不能按链接里的方式导入了。举个很简单的例子:
下面的模块test1_import中有两个文件t1.py和t2.py

t1.py的内容如下:

from . import t2
def t1():
    t2.t2()
if __name__ == '__main__':
    # 在模块内里面运行会报错,
    # 但是在外面导入这个包时,运行t1()函数一点问题都没有
    t1()

t2.py的内容如下:

def t2():
    print("我是test1_import文件夹下的t2")

如果你在t1.py下运行代码,就会报错:

from . import t2
ImportError: cannot import name 't2'

至于原因,官网给出了解释,但我还没看懂,大家可以自己看看。
如果你在模块外面导入这个包来使用,这样导入是完全没有问题的:
在test1_import模块外面创建一个t3.py文件,内容如下:

from test1_import import t1
t1.t1()

运行t3.py文件,完全没问题:

所以,如果你要在模块里面运行代码,你应该直接导入:

import t2


看,这样就能运行成功了。
总结:如果在模块外面导入模块的内容,按照链接里面介绍的方式导入包是完全没有问题的;但如果要在模块里面运行代码,就最好不要使用“.”来用作相对导入。

猜你喜欢

转载自blog.csdn.net/qq_35556064/article/details/81611328