最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)同級目錄調(diào)用的示例詳解

 更新時間:2024年06月25日 11:10:38   作者:碼農(nóng)研究僧  
同級目錄指的是位于同一級別的文件夾,這些文件夾具有相同的層級結(jié)構(gòu),它們相互平行,沒有一個被包含在另一個之中,本文將給大家介紹python實(shí)現(xiàn)同級目錄調(diào)用的示例,需要的朋友可以參考下

前言

通過制作簡易的Demo,讓其更加深入的了解如何使用

在這里插入圖片描述

1. 問題所示

發(fā)現(xiàn)python的同級目錄相互調(diào)用會出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. 原理分析

出現(xiàn) ImportError: attempted relative import with no known parent package 錯誤的原因是 Python 無法識別當(dāng)前腳本的父包,因此相對導(dǎo)入失敗

要解決這個問題并理解其背后的原理,需要了解以下幾點(diǎn):

原理分析

相對導(dǎo)入的限制

相對導(dǎo)入(例如,from …module import something)只能在包(包含 __init__.py 文件的目錄)中使用
當(dāng)運(yùn)行腳本時,如果它所在的包沒有正確識別,Python無法解析相對導(dǎo)入

腳本直接運(yùn)行的問題

如果直接運(yùn)行一個腳本(例如,通過 python file3.py),該腳本的包上下文不會被識別
相對導(dǎo)入會失敗,因?yàn)镻ython不知道如何定位腳本的父包

3. 解決方法

先給一個Demo

其文件結(jié)構(gòu)如下:

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()

這將執(zhí)行出錯

通用的解決方式有如下:

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()

執(zhí)行的結(jié)果如下:

在這里插入圖片描述

3.2 相對路徑

修改file3如下:

from ..file1 import greet

def main():
    greet()

if __name__ == "__main__":
    main()

但是 執(zhí)行結(jié)果如下:

在這里插入圖片描述

需要使用命令行的方式來執(zhí)行:

在這里插入圖片描述

注意差異

如果file3的文件如下:

from Father.file1 import greet

def main():
    greet()

if __name__ == "__main__":
    main()

還是可以直接運(yùn)行的:

在這里插入圖片描述

3.3 添加init

截圖如下:

在這里插入圖片描述

對應(yīng)file3的文件如下:

from Father.file1 import greet

def main():
    greet()

if __name__ == "__main__":
    main()

截圖如下:

在這里插入圖片描述

也可使用命令行的方式來執(zhí)行:

在這里插入圖片描述

__init__.py 文件在 Python 3.3 及其之后的版本中不是必須的,但它有助于將目錄標(biāo)識為一個包

到此這篇關(guān)于python實(shí)現(xiàn)同級目錄調(diào)用的示例詳解的文章就介紹到這了,更多相關(guān)python同級目錄調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

康乐县| 龙游县| 无棣县| 响水县| 肇州县| 东乡| 宿迁市| 济源市| 普陀区| 涟源市| 和静县| 彰化市| 德清县| 休宁县| 平阴县| 松潘县| 蒲城县| 朔州市| 邮箱| 巴彦淖尔市| 博野县| 乐清市| 南通市| 衢州市| 赤城县| 望谟县| 九龙县| 秭归县| 潜山县| 收藏| 时尚| 千阳县| 海南省| 光山县| 辽阳市| 金昌市| 金阳县| 柘城县| 平潭县| 贡觉县| 乐平市|