美文网首页
python-关于包的相对导入注意事项

python-关于包的相对导入注意事项

作者: 八爪鱼_点滴 | 来源:发表于2019-01-01 21:20 被阅读0次

        注意事项一

        python的“包相对导入”只适用于在包内的相对导入。如果执行的顶层语句不属于包,则无需使用“包相对导入”。否则会提示:ImportError: cannot import name 'test001' from '__main__' (test.py)。因为test.py并不是一个包,它只是一个顶层执行程序,虽然在test.py的路径下包含了test001包。正确的方式应该是在test001包内的python文件执行"from . import XXX"。这样才能正确执行包相对导入。

        注意事项二

        包的相对导入,应该是在包的内部路径上执行。例如test目录下有三个包test001,test002,test003。这三个包都是test目录下的三个包。如果test001下想导入test002的包,则应通过绝对导入完成导入,因为test002 包路径在sys.path目录下。

        如果想在test001使用相对导入test002,则应该将test002放入到test001包目录下,否则执行会报错:ValueError: attempted relative import beyond top-level package

        注意事项三

        python3.0和python2.6都开始提供“包的相对导入”的功能,两者都是通过from语句前面的“.”符号来指定。但是python3.0和python2.0在包的相对导入使用方式上还有一定区别的。

        (1)、python3.0默认是绝对导入,即通过搜索sys.path路径查找模块或者包,如果在各个path的路径上没有查找到对应的包或者模块名字,则会直接报错,提示无法:ModuleNotFoundError: No module named 'XXXX'。如下图,虽然test002是test001下的一个包,但是由于python3.7是绝对导入,这就导致执行python3.7 test.py的时候,sys.path路径上找不到test002的包,因为sys.path是test目录和其他库函数目录。

        (2)、python2.0默认是相对导入,即先执行相对导入包,如果没有找到相关包,再执行绝对导入。在python2.0上执行就不会有类似于python3.0的报错。

    相关文章

      网友评论

          本文标题:python-关于包的相对导入注意事项

          本文链接:https://www.haomeiwen.com/subject/qundhqtx.html