这篇文章将为大家详细讲解有关解决python无法使用导入语句的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
在练习python中包的相对导入时,即
得到只import XXX
或者
得到…,import XXX
有时会遇到这样两个错误:
SystemError:, Parent module & # 39; & # 39;, not 加载,,cannot perform relative 进口
和
ValueError:, attempted relative import beyond top-level 包
其实这两个错误的原因归根结底是一样的:在涉及到相对导入时,包所对应的文件夹必须正确的被python解释器视作计划,而不是普通文件夹。否则由于不被视作包,无法利用包之间的嵌套关系实现python中包的相对导入。
文件夹被python解释器视作包需要满足两个条件:
1,文件夹中必须有__init__ . py文件,该文件可以为空,但必须存在该文件。
2,不能作为顶层模块来执行该文件夹中的py文件(即不能作为主函数的入口)。
补充:在“从YY进口XX"这样的代码中,无论是XX还是YY,只要被python解释器视作计划,就会首先调用该包的__init__。py文件。如果都是包,则调用顺序是YY, XX。
另外,练习中”。进口XXX”和“从. .进口XXX”中的& # 39;强生# 39;和& # 39;. . & # 39;,可以等同于linux里的shell中& # 39;强生# 39;和& # 39;. . & # 39;的作用,表示当前工作目录的包和上一级的包。
举个例子:
目录树
testIm/猒_init__ . py ——main.py :得到Tom import 汤姆 ——汤姆/猒_init__.py :打印(“我# 39;m 汤姆# 39;s __init__ !“) ——tom.py :得到只import tomBrother,,得到…,import 凯特,打印(“我# 39;m 汤姆!“) ——tomBrother.py print(我# 39;m 汤姆# 39;s 兄弟!) ——凯特/猒_init__.py :打印(“我# 39;m 凯特# 39;s __init__ !“) ——kate.py
运行文件:主要。py
结果
我# 39;m 汤姆# 39;s __init__ ! 我# 39;m 汤姆# 39;s 兄弟! Traceback (most recent call 最后一个): File “D: \ PythonLearning \ TestIm \ main.py",, line 3,拷贝& lt; module>得到Tom import 汤姆 File “D: \凯特PythonLearning \ TestIm \ \ kate.py",, line 4,拷贝& lt; module>得到…,import 凯特 ValueError: attempted relative  import beyond top-level package>在祝辞
可以看的到。进口tomBrother顺利执行,首先执行了汤姆文件夹下的__init__ . py文件,后来执行了tomBrother。py文件,但是当执行到“从. .进口凯特”时报的错,这是因为我们是在TestIm文件夹下把main.py文件作为主函数的入口执行的,因此尽管TestIm文件夹中有__init__。py文件,但是该文件夹不能被python解释器视作计划,即汤姆包不存在上层packge,自然会报错,相对导入时超出了最高层级的包。
修改方法:
目录树
测试/猰ain.py :得到testIm.Tom import 汤姆 ——testIm/猒_init__ . py ——汤姆/猒_init__.py :打印(“我# 39;m 汤姆# 39;s __init__ !“) ——tom.py :得到只import tomBrother,,得到…,import 凯特,打印(“我# 39;m 汤姆!“) ——tomBrother.py print(我# 39;m 汤姆# 39;s 兄弟!) ——凯特/猒_init__.py :打印(“我# 39;m 凯特# 39;s __init__ !“) ——kate.py
运行文件:主要。py
结果
我# 39;m 顶部# 39;s __init__ ! 我# 39;m 汤姆# 39;s __init__ ! 我# 39;m 汤姆# 39;s 兄弟! ! 我# 39;m 凯特# 39;s __init__ ! 我# 39;m 汤姆!
即主函数入口不在TestIm中,则TestIm和其同样包含__init__。py文件的子文件夹都被python解释器视作包,形成相应的嵌套关系。可以正常使用。进口XXX和. .进口XXX。
关于解决python无法使用导入语句的问题就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。