網(wǎng)站首頁 編程語言 正文
假設有如下目錄結構:
-- dir0
| file1.py
| file2.py
| dir3
| file3.py
| dir4
| file4.py
dir0文件夾下有file1.py、file2.py兩個文件和dir3、dir4兩個子文件夾,dir3中有file3.py文件,dir4中有file4.py文件。
1.導入同級模塊
python導入同級模塊(在同一個文件夾中的py文件)直接導入即可。
import xxx
如在file1.py中想導入file2.py,注意無需加后綴".py":
import file2
# 使用file2中函數(shù)時需加上前綴"file2.",即:
# file2.fuction_name()
2.導入下級模塊
導入下級目錄模塊也很容易,需在下級目錄中新建一個空白的__init__.py文件再導入:
from dirname import xxx
如在file1.py中想導入dir3下的file3.py,首先要在dir3中新建一個空白的__init__.py文件。
-- dir0
| file1.py
| file2.py
| dir3
| __init__.py
| file3.py
| dir4
| file4.py
再使用如下語句:
# plan A
from dir3 import file3
或是:
# plan B
import dir3.file3
# import dir3.file3 as df3
但使用第二種方式則下文需要一直帶著路徑dir3書寫,較為累贅,建議可以另起一個別名。
3.導入上級模塊
要導入上級目錄下模塊,可以使用sys.path:
import sys
sys.path.append("..")
import xxx
如在file4.py中想引入import上級目錄下的file1.py:
import sys
sys.path.append("..")
import file1
sys.path的作用:當使用import語句導入模塊時,解釋器會搜索當前模塊所在目錄以及sys.path指定的路徑去找需要import的模塊,所以這里是直接把上級目錄加到了sys.path里。
“..”的含義:等同于linux里的‘..’,表示當前工作目錄的上級目錄。實際上python中的‘.’也和linux中一致,表示當前目錄。
4.導入隔壁文件夾下的模塊
如在file4.py中想引入import在dir3目錄下的file3.py。
這其實是前面兩個操作的組合,其思路本質上是將上級目錄加到sys.path里,再按照對下級目錄模塊的方式導入。
同樣需要被引文件夾也就是dir3下有空的__init__.py文件。
-- dir
| file1.py
| file2.py
| dir3
| __init__.py
| file3.py
| dir4
| file4.py
同時也要將上級目錄加到sys.path里:
import sys
sys.path.append("..")
from dir3 import file3
5.常見錯誤及import原理
在使用直接從上級目錄引入模塊的操作時:
from .. import xxx
經(jīng)常會報錯:
ValueError: attempted relative import beyond top-level package
這是由于相對導入時,文件夾實質上充當?shù)氖莗ackage,也就是包的角色(比如我們常用的numpy、pandas都是包)。如果python解釋器沒有認同該文件夾是package,那么這就是一個普通的文件夾,無法實現(xiàn)相對導入。
文件夾作為package需要滿足如下兩個條件:
-
文件夾中必須存在有__init__.py文件,可以為空。
不能作為頂層模塊來執(zhí)行該文件夾中的py文件。
原文鏈接:https://blog.csdn.net/m0_58086930/article/details/128699867
相關推薦
- 2023-02-10 Python常見錯誤:IndexError:?list?index?out?of?range解決_p
- 2022-03-16 淺析ORB、SURF、SIFT特征點提取方法以及ICP匹配方法_C 語言
- 2022-09-08 關于keras中的Reshape用法_python
- 2023-01-13 Python?CNN卷積神經(jīng)網(wǎng)絡實戰(zhàn)教程深入講解_python
- 2022-07-15 Python?print函數(shù):如何將對象打印輸出_python
- 2022-12-29 React控制元素顯示隱藏的三種方法小結_React
- 2022-05-16 深入理解docker鏡像的分層(小白必看)_docker
- 2022-04-02 Python數(shù)據(jù)結構之雙向鏈表詳解_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支