概念理解:在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



