一、问题说明:

在做一个项目,采用包的形式进行文件组织,运行代码是会报错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
  1. 首先,在顶层目录下,创建__init__.py文件,在各级包文件夹下也同时创建__init__.py文件;
  2. view.py引用item.py内的函数或类,需采用如下方式:from ui.item import test,引用modules包下文件内的函数或类,需采用如下方式:
from modules.module1 import crawl
from modules import module2
  1. 项目目录下的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相关推荐

  1. Python报错:ImportError: attempted relative import with no known parent package

    目录 一.问题 二.解决 一.问题 运行代码出现报错:ImportError: attempted relative import with no known parent package 问题原因: ...

  2. [译][python]ImportError:attempted relative import with no known parent package

    前言 在这篇文章中,我将会解析 ImportError: attempted relative import with no known parent package 这个异常的原因.当你在运行的py ...

  3. Python相对引用报错ImportError: attempted relative import with no known parent package的处理方法

    报错信息 ImportError: attempted relative import with no known parent package 报错信息的意思是尝试使用相对路径导入但找不到已知的父级 ...

  4. Python 导包问题(importerror: attempted relative import with no known parent package)

    Python 导包问题(importerror: attempted relative import with no known parent package) 问题描述 解决方法 问题描述 今天想优 ...

  5. ImportError:attempted relative import with no known parent package

    python包的引用,如果使用pypharm时候,引入包容易出错,解决方法如下 执行代码出现ImportError:attempted relative import with no known pa ...

  6. 相对导入问题解决,ImportError:attempted relative import with no known parent package

    前言 本文中,我将会分析报错 ImportError: attempted relative import with no known parent package 的原因.当运行python脚本,使 ...

  7. Pycharm: ImportError: attempted relative import with no known parent package解决方案

    不成熟的解决方案总结 1. 增加sources root,这样被引用的py中的相对路径(特指在路径前一个点两个点这种情况)就能使用了: 2. 引用其他py,不想使用全路径,可以右键被引用的py 复制他 ...

  8. ImportError: attempted relative import with no known parent package

    问题背景: 在windows中开发完对应的Pytest代码,在放到centos7.4时,出现这个错: 但是在windows中完美运行: 这个问题确实比较蛋疼,将近两三个小时浪费在这上面了: 概念理解: ...

  9. (已解决)ImportError attempted relative import with no known parent package

    想要调用同一目录下的另一个py文件中的类,以下或许是可行的解决方案. 需要做到两点 1. 将主调文件的名称改为__init__.py 2. from 被调文件的文件名称(删去末尾.py) import ...

最新文章

  1. unix到底有啥用_观点|什么是Unix以及它为什么这么重要?
  2. Developer Express控件组合中的GridControl控件,如何自动显示每一行的序号
  3. 2019牛客暑期多校训练营(第六场)C - Palindrome Mouse (回文树dfs)
  4. JS里面的懒加载(lazyload)
  5. MyEclipse创建struts.xml
  6. 【操作系统】进程の易错点解答
  7. 分割、检测与定位,高分辨率网络显神威!这会是席卷深度学习的通用结构吗?...
  8. 简单的MPI+Fortran95实现
  9. Nsight Compute(NCU) Scheduler Statistics 数据解读
  10. Android中GPUImage的简单使用
  11. Tether聘请前银行分析师首席合规官
  12. 马尔可夫随机场(Markov Random Field)与马尔可夫链
  13. 数字图像处理100问—43 Canny 边缘检测:第三步——滞后阈值
  14. ubuntu20.04安装到u盘+配置美化
  15. 好玩的横版射击游戏介绍:Broforce武装原型 for mac
  16. ZY-Player安静看电影
  17. Ubuntu安装re2c和ninja
  18. vue——省市区三级联动demo
  19. scrapy框架介绍
  20. protocol buffer编码原理,让你理解pb是如何实现的

热门文章

  1. 运维派 企业面试题6 防dos攻击
  2. LaTex创建四级目录
  3. linux 2048移动代码,2 的威力,Linux 的威力:终端中的 2048
  4. python去除图片马赛克_python 检测图片是否有马赛克
  5. How the System Finds and Loads Drivers
  6. 人工智能会代替人工翻译?知行翻译:这是不可能地!
  7. ppp协议 服务器,PPP(点对点协议(Point to Point Protocol))_百度百科
  8. jadx 1.4.5反编译包不全
  9. Python 实现 T00ls 自动签到脚本(邮件+钉钉通知)
  10. java 创建二维码 并加载显示到窗口