解决python无法使用导入语句的问题

  介绍

这篇文章将为大家详细讲解有关解决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无法使用导入语句的问题就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

解决python无法使用导入语句的问题