python实现同级目录调用的示例详解

 更新时间:2024年06月25日 11:10:38   作者:码农研究僧  
同级目录指的是位于同一级别的文件夹,这些文件夹具有相同的层级结构,它们相互平行,没有一个被包含在另一个之中,本文将给大家介绍python实现同级目录调用的示例,需要的朋友可以参考下

前言

通过制作简易的Demo,让其更加深入的了解如何使用

在这里插入图片描述

1. 问题所示

发现python的同级目录相互调用会出Bug

E:\software\anaconda3\envs\py3.10\python.exe F:\python_project\test\Father\child\file3.py 
Traceback (most recent call last):
  File "F:\python_project\test\Father\child\file3.py", line 1, in <module>
    from ..file1 import greet  # 这将失败,没有 __init__.py
ImportError: attempted relative import with no known parent package

Process finished with exit code 1

截图如下:

在这里插入图片描述

2. 原理分析

出现 ImportError: attempted relative import with no known parent package 错误的原因是 Python 无法识别当前脚本的父包,因此相对导入失败

要解决这个问题并理解其背后的原理,需要了解以下几点:

原理分析

相对导入的限制

相对导入(例如,from …module import something)只能在包(包含 __init__.py 文件的目录)中使用
当运行脚本时,如果它所在的包没有正确识别,Python无法解析相对导入

脚本直接运行的问题

如果直接运行一个脚本(例如,通过 python file3.py),该脚本的包上下文不会被识别
相对导入会失败,因为Python不知道如何定位脚本的父包

3. 解决方法

先给一个Demo

其文件结构如下:

test/
├── Father/
│   ├── file1.py
│   └── child/
│       └── file3.py

file1如下:

def greet():
    print("Hello from file1")

file3如下:

from ..file1 import greet  # 这将失败,没有 __init__.py

def main():
    greet()

if __name__ == "__main__":
    main()

这将执行出错

通用的解决方式有如下:

3.1 添加父目录

在file3中修改代码为如下:

import sys
import os

# 将父目录添加到 sys.path
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from Father.file1 import greet

def main():
    greet()

if __name__ == "__main__":
    main()

执行的结果如下:

在这里插入图片描述

3.2 相对路径

修改file3如下:

from ..file1 import greet

def main():
    greet()

if __name__ == "__main__":
    main()

但是 执行结果如下:

在这里插入图片描述

需要使用命令行的方式来执行:

在这里插入图片描述

注意差异

如果file3的文件如下:

from Father.file1 import greet

def main():
    greet()

if __name__ == "__main__":
    main()

还是可以直接运行的:

在这里插入图片描述

3.3 添加init

截图如下:

在这里插入图片描述

对应file3的文件如下:

from Father.file1 import greet

def main():
    greet()

if __name__ == "__main__":
    main()

截图如下:

在这里插入图片描述

也可使用命令行的方式来执行:

在这里插入图片描述

__init__.py 文件在 Python 3.3 及其之后的版本中不是必须的,但它有助于将目录标识为一个包

到此这篇关于python实现同级目录调用的示例详解的文章就介绍到这了,更多相关python同级目录调用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python基础教程之while循环用法讲解

    Python基础教程之while循环用法讲解

    Python中除了for循环之外还有一个while循环,下面这篇文章主要给大家介绍了关于Python基础教程之while循环用法讲解的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • pandas参数设置的实用小技巧

    pandas参数设置的实用小技巧

    这篇文章主要给大家介绍了关于pandas参数设置的实用小技巧,文中通过实例代码结束的非常详细,对大家学习或者使用pandas具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-08-08
  • Python图像识别+KNN求解数独的实现

    Python图像识别+KNN求解数独的实现

    这篇文章主要介绍了Python图像识别+KNN求解数独的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Python获取当前脚本文件夹(Script)的绝对路径方法代码

    Python获取当前脚本文件夹(Script)的绝对路径方法代码

    在本篇文章中小编给各位整理了关于Python获取当前脚本文件夹(Script)的绝对路径实例代码内容,有需要的朋友们学习下。
    2019-08-08
  • python 中的 module 和 package

    python 中的 module 和 package

    这篇文章主要介绍了 python 中的 module 和 package ,文章基于Python的相关资料展开对主题的详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • 如何创建第一个Pygame程序

    如何创建第一个Pygame程序

    本文主要介绍了如何创建第一个Pygame程序,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 如何利用python查找电脑文件

    如何利用python查找电脑文件

    利用python查找电脑里的文件非常方便,首先是导入模块os,然后利用os.listdir()打开目录下的所有文件,files其实是一个列表。具体操作方法大家参考下本文
    2018-04-04
  • Python实现提取XML内容并保存到Excel中的方法

    Python实现提取XML内容并保存到Excel中的方法

    这篇文章主要介绍了Python实现提取XML内容并保存到Excel中的方法,涉及Python针对xml文件的读取、解析以及Excel文件的写入、保存等相关操作技巧,需要的朋友可以参考下
    2018-09-09
  • 用map函数来完成Python并行任务的简单示例

    用map函数来完成Python并行任务的简单示例

    这篇文章主要介绍了用map函数来完成Python并行任务的简单示例,多线程和多进程编程的问题一直都是Python中的热点和难点,需要的朋友可以参考下
    2015-04-04
  • Python中的分布式框架Ray的安装与使用教程

    Python中的分布式框架Ray的安装与使用教程

    Ray框架下不仅可以通过conda和Python十分方便的构建一个集群,还可以自动的对分布式任务进行并发处理,且支持GPU分布式任务的提交,本文介绍了基于Python的分布式框架Ray的基本安装与使用,感兴趣的朋友一起看看吧
    2024-08-08

最新评论