網站首頁 編程語言 正文
1 init文件夾圖標
在PyCharm中,帶有__init__.py
這個文件的目錄被認為是Python的包目錄,與普通目錄的圖標有不一樣的顯示。
如下圖所示,data目錄沒有__init__.py
,其圖標是個文件夾圖標;而model下有_init__.py文件,其圖標是一個包。所以__init__.py
是Python中package的標識
2 init.py導入包方式
__init__.py
文件的一個主要作用是將文件夾變為一個Python模塊,Python中的每個模塊的包中,都有__init__.py
文件。
python在解釋包的時候會給本模塊下的所有文件建立一個索引放在當前路徑下的__init__.py
文件中,如果沒有文件索引,即使import了指定的包,解釋器還是找不到這個模塊下的文件。如果一個文件夾下沒有__init__.py
文件,不會被當做一個模塊。
2.1 單個導入
# package # __init__.py import re import urllib import sys import os # a.py import package print(package.re, package.urllib, package.sys, package.os)
注意這里訪問__init__.py
文件中的引用文件,需要加上包名。
2.2 批量引入(定義__all__用來模糊導入)
我們在python中導入一個包時,實際上是導入了它的__init__.py文件,這樣我們可以在__init__.py文件中批量導入我們所需要的模塊,而不再需要一個一個的導入。
使用__init__.py
中的重要變量__all__,
將模塊全部導入。
# __init__.py __all__ = ['os', 'sys', 're', 'urllib'] # a.py from package import *
這就會將注冊在__init__.py文件中__all__列表中的模塊和包導入到當前文件中來。
3 實例
假設我們的模塊包的目錄結構如下:
- mypackage - - subpackage_1 - - - test11.py - - - test12.py - - subpackage_2 - - - test21.py - - - test22.py - - subpackage_3 - - - test31.py - - - test32.py
直接導入:
如果我們使用最直接的導入方式,將整個文件拷貝到工程目錄下,然后直接導入:
from mypackage.subpackage_1 import test11 from mypackage.subpackage_1 import test12 from mypackage.subpackage_2 import test21 from mypackage.subpackage_2 import test22 from mypackage.subpackage_3 import test31 from mypackage.subpackage_3 import test32
這樣的話,查找的時候也會麻煩,此時__init__.py就起到了簡化的作用。
init.py導入:
在mypackage/添加__init__.py程序,有三種寫入方式。
from mypackage.subpackage_1 import test11 from mypackage import * from mypackage.subpackage_1 import *
4 其他常見問題
4.1 使用__init__.py文件的優點
- ①當目錄下包含這個文件時,Python會將其當作成包目錄,進而可以使用import xx.xx的方式導入目錄下的文件或者模塊。
- ②使用__init__.py文件可以控制模塊導入時的變量和內容,便于編程者的控制。(簡化作用)
4.2 沒有__init__.py文件的目錄,使用import xx.xx會報錯嗎?
在較低的版本中(如3.2及以下),沒有__init__.py文件的目錄不能使用import xx.xx導入相關模塊,但是后面的版本可以。
4.3 根據導入模塊和主程序不同import方式
(1)如果導入的模塊和主程序在同個目錄下,直接import就行了
(2)如果導入的模塊是在主程序所在目錄的子目錄下,可以在子目錄中增加一個空白的__init__.py文件,該文件使得python解釋器將子目錄整個也當成一個模塊,然后直接通過“import 子目錄.模塊”導入即可。
(3)如果導入的模塊是在主程序所在目錄的父目錄下,則要通過修改path來解決,有兩種方法:
①通過sys.path.append
import sys sys.path.append('父目錄的路徑') # '需要引用模塊的地址'
來改變。python解釋器就是通過sys.path去的尋找模塊的。sys.path是一個列表 list ,它里面包含了已經添加到系統的環境變量路徑。
【注意】:這種方法是運行時修改,腳本運行后就會失效。
②直接修改環境變量:在windows中是 “ set 變量=‘路徑’ ” 例如:set PYTHONPATH=‘C:\test…’ 查看是否設置成功用echo %PYTHONPATH%,而且進到python解釋器中查看sys.path,會發現已經有了新增加的路徑了。這 種方式是永久的,一次設置以后一直都有效。在linux中是 “export 變量=‘路徑’ “,查看是” echo $變量 "
原文鏈接:https://blog.csdn.net/weixin_45928096/article/details/126984304
相關推薦
- 2022-10-05 Iptables防火墻基本匹配條件應用詳解_安全相關
- 2022-07-22 防火墻.iptables-tcp-flags防止nmap端口掃描
- 2022-05-17 獲取當前機器注冊到nacos上的機器ip
- 2022-11-05 安裝ingress-nginx遇到的一些坑實戰記錄_云其它
- 2022-06-01 Python?中enum的使用方法總結_python
- 2022-10-07 Qt入門學習之數據庫操作指南_C 語言
- 2022-10-14 TorchServe部署yolov5項目(Docker篇)
- 2022-08-28 前端實現加載完畢之前loading提示效果
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支