Python相对导入:ValueError: attempted relative import beyond top-level package
首先明确,Python相对导入只能在同一package下而言的。
项目结构:
relativeimport
├── __init__.py
├── modfail2.py
├── pack1
│ ├── __init__.py
│ ├── mod1.py
│ ├── mod1_1.py
│ ├── pack2
│ │ ├── __init__.py
│ │ └── mod2.py
│ └── pack3
│ ├── __init__.py
│ └── mod3.py
├── packfail
│ ├── __init__.py
│ └── modfail.py
└── server.py
server.py文件
#server.py
import sys
print(sys.path)from pack1.mod1 import func1
from pack1.mod1_1 import func1_1
from pack1.pack2.mod2 import func2
from packfail.modfail import funcfail
func1()
func1_1()
func2()
modfail.py文件
#modfail.pyfrom ..pack1.mod1 import func1
def funcfail():print('funcfail')
server.py是根目下的主文件,运行报错,modfail.py导入顶层目录relativeimport下的mod1模块的func1函数失败:
Traceback (most recent call last):
File "/relativeimport/server.py", line 4, in <module>
from packfail.modfail import funcfail
File "/relativeimport/packfail/modfail.py", line 1, in <module>
from ..pack1.mod1 import func1
ValueError: attempted relative import beyond top-level package
失败原因:
attempted relative import beyond top-level package(超出了顶层package进行相对导入)
但是relativeimport目录下有__init__.py文件的,按理说也应该被当成package的,但是Python貌似有个坑爹的设定,当前目录不会被当做package(也就是server.py所在的relativeimport目录),所以自然就不能进行相对导入了。
改一下server.py文件
import sys
print(sys.path)from pack1.mod1 import func1
from pack1.mod1_1 import func1_1
from pack1.pack2.mod2 import func2from .modfail2 import funcfail2
func1()
func1_1()
func2()
Traceback (most recent call last):
File "/relativeimport/server.py", line 9, in <module>
from .modfail2 import funcfail2
ModuleNotFoundError: No module named '__main__.modfail2'; '__main__' is not a package
相对导入 relativeimport目录下的modfail2.py模块的funcfail2失败,说是'__main__' is not a package,就是当前的relativeimport目录就不是一个package,就是Python的那个坑爹设定,不会把项目入口的当前目录当做package。
改成绝对导入一起正常。
modfail.py
#modfail.py
# from ..pack1.mod1 import func1 #相对导入错误
from pack1.mod1 import func1 #绝对导入正确
def funcfail():print('funcfail')
#server.py #server.pyimport sys
print(sys.path)from pack1.mod1 import func1
from pack1.mod1_1 import func1_1
from pack1.pack2.mod2 import func2from packfail.modfail import funcfail
# from .modfail2 import funcfail2 #相对导入错误
from modfail2 import funcfail2 #绝对导入正确
func1()
func1_1()
func2()
funcfail()
funcfail2()
要用相对导入必须要统一package中。pack1下就是相对导入的例子,一切正常木有错误:
pack1结构:
mod2.py
#mod2.pyfrom ..mod1_1 import func1_1
from ..pack3.mod3 import func3
def func2():print('func2')
mod3.py
#mod3.pydef func3():print('func3')
mod1.py
#mod1.pyfrom .mod1_1 import func1_1
def func1():print('func1')
mod1_1.py
#mod1_1.pydef func1_1():print('func1_1')
全部正确输出:
func1
func1_1
func2
funcfail
funcfail2
Python相对导入:ValueError: attempted relative import beyond top-level package相关推荐
- python 顶层模块理解 ValueError: attempted relative import beyond top-level package
package_0 ├── module_0.py ├── module_1.py ├── package_1 │ ├── __init__.py │ ├── module_2.py │ ├── mo ...
- 成功解决ValueError: attempted relative import beyond top-level package
成功解决ValueError: attempted relative import beyond top-level package 目录 解决问题 解决思路 解决方法 解决问题 ValueError ...
- 【Python】报错:ValueError: attempted relative import beyond top-level package问题解决
报错: 解决办法:在导入模板的文件里添加 import sys sys.path.append("..")
- 【attempted relative import beyond top-level package】
F1 |------F1_1 | |--__init__.py | |--module1_1.py : class C1 |--__init__.py |--current.py | F2 |--__ ...
- ImportError: attempted relative import with no known parent package
问题背景: 在windows中开发完对应的Pytest代码,在放到centos7.4时,出现这个错: 但是在windows中完美运行: 这个问题确实比较蛋疼,将近两三个小时浪费在这上面了: 概念理解: ...
- [译][python]ImportError:attempted relative import with no known parent package
前言 在这篇文章中,我将会解析 ImportError: attempted relative import with no known parent package 这个异常的原因.当你在运行的py ...
- Python项目文件引用问题:ImportError: attempted relative import with no known parent package
一.问题说明: 在做一个项目,采用包的形式进行文件组织,运行代码是会报错ImportError: attempted relative import with no known parent pack ...
- Python报错:ImportError: attempted relative import with no known parent package
目录 一.问题 二.解决 一.问题 运行代码出现报错:ImportError: attempted relative import with no known parent package 问题原因: ...
- Python相对引用报错ImportError: attempted relative import with no known parent package的处理方法
报错信息 ImportError: attempted relative import with no known parent package 报错信息的意思是尝试使用相对路径导入但找不到已知的父级 ...
最新文章
- 对 Jenkins+ANT+Jmeter 接口测试的实践
- api 创建zookeeper客户端_zookeeper分布式锁原理及实现
- 面试官灵魂的一击:你懂MySQL事务吗?
- 学校通用计算机保护,浅谈学校计算机教室软件系统的保护.docx
- TF之TFOD-API:基于tensorflow框架利用TFOD-API脚本文件将YoloV3训练好的.ckpt模型文件转换为推理时采用的.pb文件
- 【Python】核酸结果统计难?复旦博士生的操作火了......
- 深度学习学习7步骤_如何通过4个简单步骤为深度学习标记音频
- 泛型在继承方面的体现与通配符
- jq监听页面的滚动事件,
- 转载:面向站长和网站管理员的Web缓存加速指南
- python3.5 爬取mzitu网站图片
- 【密码学原理】密钥管理和分发——对称密钥分发
- 浅谈国内软件信息化项目项目立项管理办法
- ELK日志处理之Filebeat工作原理
- CF755F PolandBall and Gifts
- Java 从键盘输入数据到一维double数组中
- Unity项目-黑魂复刻(四)玩家控制器(翻滚以及跳跃操作改动)
- Word和Excel中的常用办公操作
- mysql的cpu使用率突然增高_mysql cpu使用率过高解决方法
- “鸡”不可失—— 咕咕机3代VS2代对比测评