Python项目文件引用问题:ImportError: attempted relative import with no known parent package
一、问题说明:
在做一个项目,采用包的形式进行文件组织,运行代码是会报错ImportError: attempted relative import with no known parent package
,下面先贴出解决方案。
二、解决方案
项目目录示例
└── project├── __init__.py├── main.py└── modules├── __init__.py└── module1.py└── module2.py└── ui├── __init__.py└── view.py└── item.py
- 首先,在顶层目录下,创建
__init__.py
文件,在各级包文件夹下也同时创建__init__.py
文件; view.py
引用item.py
内的函数或类,需采用如下方式:from ui.item import test
,引用modules
包下文件内的函数或类,需采用如下方式:
from modules.module1 import crawl
from modules import module2
- 项目目录下的
main.py
文件引用各个包下文件内的函数或类,也需采用下面的方式:
from ui.item import test
from modules.module1 import crawl
from modules import module2
可以发现,上述引用方式均为绝对引用,而不是下述相对引用方式
from .item import test
from ..modules.module1 import crawl
因此,在项目中一般来说最好采用上述绝对引用方式,基本可以避免文件引用问题。
三、优缺点分析
3.1 绝对引用
优点是清晰且直接,可以很容易就确定引用文件位置;且即使当前文件的位置发生变化,导入语句仍然有效。
缺点是当引用路径较为复杂时,导入语句很长,如:
from package1.subpackage2.subpackage3.subpackage4.module5 import function6
3.2 相对引用
最直观的优点就是简洁,在包层次结构较为复杂时,相对引用能够借助于.
以较短的代码实现快速的引用。
缺点是较为凌乱,在项目文件位置发生变更时,不易维护;此外,相对引用可读性较差。较难根据引用代码确定引用文件路径。
官方建议,总是优先使用绝对引用,只有在引用路径较为复杂导致引用代码很长时,才考虑使用相对引用。
参考资料
[1] [译][python]ImportError:attempted relative import with no known parent package
[2] python基础教程之执行文件异常报错:ImportError: attempted relative import with no known parent package
[3] Absolute vs Relative Imports in Python
[4] 5. The import system
以上,欢用评论交流。
Python项目文件引用问题: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 问题原因: ...
- [译][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 package 报错信息的意思是尝试使用相对路径导入但找不到已知的父级 ...
- Python 导包问题(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
python包的引用,如果使用pypharm时候,引入包容易出错,解决方法如下 执行代码出现ImportError:attempted relative import with no known pa ...
- 相对导入问题解决,ImportError:attempted relative import with no known parent package
前言 本文中,我将会分析报错 ImportError: attempted relative import with no known parent package 的原因.当运行python脚本,使 ...
- Pycharm: ImportError: attempted relative import with no known parent package解决方案
不成熟的解决方案总结 1. 增加sources root,这样被引用的py中的相对路径(特指在路径前一个点两个点这种情况)就能使用了: 2. 引用其他py,不想使用全路径,可以右键被引用的py 复制他 ...
- ImportError: attempted relative import with no known parent package
问题背景: 在windows中开发完对应的Pytest代码,在放到centos7.4时,出现这个错: 但是在windows中完美运行: 这个问题确实比较蛋疼,将近两三个小时浪费在这上面了: 概念理解: ...
- (已解决)ImportError attempted relative import with no known parent package
想要调用同一目录下的另一个py文件中的类,以下或许是可行的解决方案. 需要做到两点 1. 将主调文件的名称改为__init__.py 2. from 被调文件的文件名称(删去末尾.py) import ...
最新文章
- unix到底有啥用_观点|什么是Unix以及它为什么这么重要?
- Developer Express控件组合中的GridControl控件,如何自动显示每一行的序号
- 2019牛客暑期多校训练营(第六场)C - Palindrome Mouse (回文树dfs)
- JS里面的懒加载(lazyload)
- MyEclipse创建struts.xml
- 【操作系统】进程の易错点解答
- 分割、检测与定位,高分辨率网络显神威!这会是席卷深度学习的通用结构吗?...
- 简单的MPI+Fortran95实现
- Nsight Compute(NCU) Scheduler Statistics 数据解读
- Android中GPUImage的简单使用
- Tether聘请前银行分析师首席合规官
- 马尔可夫随机场(Markov Random Field)与马尔可夫链
- 数字图像处理100问—43 Canny 边缘检测:第三步——滞后阈值
- ubuntu20.04安装到u盘+配置美化
- 好玩的横版射击游戏介绍:Broforce武装原型 for mac
- ZY-Player安静看电影
- Ubuntu安装re2c和ninja
- vue——省市区三级联动demo
- scrapy框架介绍
- protocol buffer编码原理,让你理解pb是如何实现的
热门文章
- 运维派 企业面试题6 防dos攻击
- LaTex创建四级目录
- linux 2048移动代码,2 的威力,Linux 的威力:终端中的 2048
- python去除图片马赛克_python 检测图片是否有马赛克
- How the System Finds and Loads Drivers
- 人工智能会代替人工翻译?知行翻译:这是不可能地!
- ppp协议 服务器,PPP(点对点协议(Point to Point Protocol))_百度百科
- jadx 1.4.5反编译包不全
- Python 实现 T00ls 自动签到脚本(邮件+钉钉通知)
- java 创建二维码 并加载显示到窗口