栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

ImportError: attempted relative import with no known parent package

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ImportError: attempted relative import with no known parent package

问题背景:

在windows中开发完对应的Pytest代码,在放到centos7.4时,出现这个错;

但是在windows中完美运行;

这个问题确实比较蛋疼,将近两三个小时浪费在这上面了;

概念理解:
  • 脚本(script):通过执行该文件能够完成某项任务,其中存在必要的任务执行逻辑(一般通过if __name__ == '__main__:'代码块明确任务的整体执行逻辑);
  • 模块(module):以.py作为文件名扩展的单个Python文件,一般由定义不同常量、函数、类而组成,其内容为方便其它模块、脚本进行调用,不存在自身的运行逻辑(也即通过在其它文件中使用import语句进行调用,而非直接通过python *.py运行);
  • 包(package):如果一个目录中存在多个模块,可以通过创建__init__.py文件将该当前目录标识为一个包。若多个模块放置于具有多层嵌套的目录当中,其逻辑关系为包(根目录)-> 子包(子目录)-> 模块(*.py);
  • 绝对导入(absolute import):从包/模块外部,按照目标模块的存在路径从外到内进行导入。示例单独的模块:import module
  • 模块位于包内部(不存在子包):from package import module
  • 模块位于包内部(存在子包):from package.subpackage import module)
  • 相对导入(relative import):位于同一包中的不同子包和模块,可以通过前缀.标识存在调用关系的包/模块之间的路径依赖关系并进行相对调用。示例:同层目录的模块:from . import module
  • 模块位于同层包内部(不存在子包):from .package import module
  • 模块位于同层包内部(存在子包):from .packge.subpackge import module模块位于上一层级目录:将以上语句的前缀进行替换from . -> from ..,以此类推
     

概念参考文章:(1条消息) 【一分钟解决】Python报错importError: attempted relative import with no known parent package_Jared Yam的博客-CSDN博客

解决方案:

在你的脚本文件中加入以下代码,将不同模块的包路径添加到运行的主文件中

#!/usr/bin/env python3

if __name__ == '__main__' and __package__ is None:
    from os import sys, path
    # __file__ should be defined in this case
    PARENT_DIR = path.dirname(path.dirname(path.abspath(__file__)))
   sys.path.append(PARENT_DIR)

from 你的项目目录.子模块import *

解决方案参考博文:python - Relative imports for the billionth time - Stack Overflow

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/355753.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号