精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Python 的 import 是怎么工作的?

開發(fā) 前端
本文分享了什么是模塊(module),什么是包(package),import 的搜索路徑,也分享了相對導(dǎo)入和絕對導(dǎo)入的區(qū)別,最后舉了一個(gè)非常實(shí)用的 import 例子,方便你構(gòu)建自己的包。

你好,我是 somenzz,可以叫我征哥。

Python 的 import 是非常直觀的,但即使這樣,有時(shí)候你會發(fā)現(xiàn),明明包就在那里,我們?nèi)詴龅? ModuleNotFoundError,明明相對路徑非常正確,就是報(bào)錯

ImportError: attempted relative import with no known parent package

導(dǎo)入同一個(gè)目錄的模塊和不同的目錄的模塊是完全不同的,本文通過分析使用 import 經(jīng)常遇到的一些問題,來幫助你輕松搞定 import ,據(jù)此,你可以輕松創(chuàng)建屬于自己的包。

1.什么是模塊(module),什么是包(package)

模塊(module)

模塊與包的關(guān)系,可以類比文件和目錄,模塊就是文件。

Python 文檔中這樣描述,一個(gè) Python 文件就是一個(gè)模塊,Python 的文件名(不帶后綴.py)就是模塊名。

一個(gè) module 可以包含變量、函數(shù)和類,它們是該 module 定義的命名空間的一部分,因此變量的命名問題不是問題,因?yàn)閮蓚€(gè)不同的模塊可以有同名的變量、函數(shù)和類。

包(package)

模塊與包的關(guān)系,可以類比文件和目錄,包就是目錄。

package 里面可以有 module,也可以有子包(sub-package)。一個(gè)模塊定義一個(gè)命名空間,以便變量、函數(shù)和類可以在兩個(gè)不同的模塊中具有相同的名稱,同樣的,一個(gè)包對其組成的包和模塊做同樣的事情,可以通過點(diǎn)號訪問主包中的模塊和包。

一個(gè)基本的 package 可以包含 sub-package、modules、__init__.py(Python 3.3 之后非必需)、setup.py。一個(gè)可能的 package 結(jié)構(gòu)如下所示:

而 setup.py 存在于你的 package 所在的主目錄中,包含配置信息,如所需的依賴項(xiàng)、腳本和子包。你還可以指定有關(guān) package 的元數(shù)據(jù),例如 package 的名稱、作者、描述等。

setup.py 是 pip 用來安裝你的包的文件。

2.import 時(shí)發(fā)生了什么

先舉一個(gè)簡單的例子,比如說同一個(gè)目錄有兩個(gè)文件,file1.py 和 file2.py,內(nèi)容很簡單,就打印各自的文件名,不同的是 file2.py 里面 import 了 file1:

#file1.py
print("This is file1.py")
#file2.py
print("This is file2.py")
import file1

運(yùn)行 file2.py 可以得到下面的結(jié)果:

? python file2.py
This is file2.py
This is file1.py

可以看出:

  • import 很直觀,用誰就 import 誰。
  • import 語句就是一個(gè)普通的語句,可以放在任何位置。
  • 一個(gè)文件被 import 的時(shí)候,就會被執(zhí)行,其內(nèi)部的類或?qū)ο髮⑻砑拥狡涿臻g。

我們還要知道 import 的搜索順序,只需要記住一點(diǎn),那就是 import 會去 sys.path 里面搜索。

比如我在 file2.py 的末尾添加一行代碼:import sys; print(sys.path) 就可以打印 import 的搜索路徑:

可以看出 sys.path 的順序:

  • 會先搜索執(zhí)行腳本所在的路徑
  • 標(biāo)準(zhǔn)庫
  • 第三方庫 site-packages

關(guān)于 sys.path 需要你注意的是:

  • 在解釋器環(huán)境下,sys.path[0] 就是解釋器啟動時(shí)所在的路徑 ''
  • sys.path 并不會依賴當(dāng)前程序的工作路徑 - os.getcwd(),僅僅依賴第一個(gè)腳本所在的路徑:

  • 如果一個(gè)模塊導(dǎo)入另一個(gè)模塊,而后者又導(dǎo)入另一個(gè)模塊,則第一個(gè)模塊的 sys.path 是解釋器搜索第二個(gè)導(dǎo)入語句的位置。

一旦模塊或包被找到,就會執(zhí)行該模塊或包。如果包里面有初始化文件 __init__.py,導(dǎo)入的時(shí)候,會先執(zhí)行 __init__.py。

然后要導(dǎo)入的項(xiàng)目就添加到了其命名空間內(nèi),我們可以通過 xx.yy 的方式來使用。

3.什么時(shí)候用相對導(dǎo)入,什么時(shí)候用絕對導(dǎo)入

先看看什么是絕對導(dǎo)入,所謂絕對導(dǎo)入就是這樣的形式:

import aa
import aa.bb
from aa import bb

這樣的方式很直觀, import 會去 sys.path 查找就行了,如果遇到了 ModuleNotFoundError,思考一下為什么 sys.path 沒有我們要導(dǎo)入的包,或者手動把這個(gè)包的路徑插入到 sys.path 中去。

再看看什么是相對導(dǎo)入,所謂相對導(dǎo)入就是這樣的形式:

from . import aa
from .aa import bb
from .. import yy

也就是說相對路徑中有個(gè) . 號,用來表明要導(dǎo)入的模塊或當(dāng)前的包的相對位置。

舉個(gè)例子,我們 pythonimportexample 目錄下新建一個(gè)目錄 subpackage1,在 subpackage1 內(nèi)新建兩個(gè)文件 file3.py、file4.py。

內(nèi)容如下:

file3.py :

print("This is file3.py")

file4.py:

from . import file3
print("This is file4.py")

只要我們直接運(yùn)行 file4.py,那是一定會報(bào)錯的:

Python 提示我們:

ImportError: attempted relative import with no known parent package

也就是說相對導(dǎo)入不知道父包是誰,換句話說,這是一個(gè)子包,必須讓父包來調(diào)用它,直接運(yùn)行這個(gè)文件是不行的,即使你在 file4.py 的目錄 subpackage1 同級的目錄執(zhí)行該文件也是不行的,見上圖。

但是在 file4.py 的目錄 subpackage1 同級的目錄作為一個(gè) module 來執(zhí)行是可以的,如下圖:

換句話說,我們把 subpackage1 作為一個(gè)包來讓別人用,相對導(dǎo)入是可以的,比如說我們在目錄 subpackage1 同級的目錄新建一個(gè) file5.py 的文件,內(nèi)容如下:

file5.py:

from subpackage1 import file4。

然后,執(zhí)行 python file5.py 可以看出,相對導(dǎo)入已經(jīng)正常工作:

結(jié)論

  • 如果是當(dāng)做腳本文件直接運(yùn)行的,使用絕對導(dǎo)入。
  • 如果是當(dāng)做模塊供其他文件導(dǎo)入,使用相對導(dǎo)入。

4.一個(gè)自定義包的例子

先上一個(gè)圖來看下目錄及引用結(jié)構(gòu),方塊的是目錄,橢圓的是文件,曲線是引用:

其中 import_example 目錄下有 setup.py 和 run.py

run.py 導(dǎo)入了 file4、file5、file6。

file4 導(dǎo)入了 file3,file5 導(dǎo)入了 file3。

file6 導(dǎo)入了 file2,file2 導(dǎo)入了 file1。

現(xiàn)在我們來執(zhí)行一下 run.py 看下效果:

可以看出所有相對導(dǎo)入都已正常工作,雖然 file3 被導(dǎo)入了兩次,但只執(zhí)行了一次,說明 Python 內(nèi)部已經(jīng)考慮了同一個(gè)包的多重導(dǎo)入問題。

自定義包就是讓其他文件導(dǎo)入使用的,因此 pythonimportexample目錄下都使用相對導(dǎo)入,源代碼見:

https://gitee.com/somenzz/code-example/tree/master/import_example

點(diǎn)閱讀原文也可以直接訪問。

這里還有一些自定義包的例子:

  • dbinterface[1]
  • transferfile[2]

最后的話

本文分享了什么是模塊(module),什么是包(package),import 的搜索路徑,也分享了相對導(dǎo)入和絕對導(dǎo)入的區(qū)別,最后舉了一個(gè)非常實(shí)用的 import 例子,方便你構(gòu)建自己的包。

責(zé)任編輯:武曉燕 來源: Python七號
相關(guān)推薦

2024-08-20 16:27:54

2024-03-07 09:20:16

2024-12-25 15:42:39

視頻數(shù)據(jù)實(shí)時(shí)直播

2018-09-13 13:52:08

2024-02-19 00:00:00

Docker輕量級容器

2025-01-14 08:13:11

2024-12-04 08:40:19

2011-02-18 09:56:42

Facebook人才FaceBook

2021-05-10 17:20:55

AIOps開發(fā)人員人工智能

2011-08-08 13:45:58

jQuery

2024-06-24 00:07:00

開源es搜索引擎

2021-09-28 08:31:22

Flex:1 CSSflex屬性

2018-09-05 08:59:51

服務(wù)器DNS網(wǎng)絡(luò)

2023-03-06 00:27:02

Kubernetesscheduler系統(tǒng)

2023-03-03 11:12:34

Kubernetes控制器后端

2021-02-02 10:53:16

Python編程開發(fā)

2024-05-28 09:49:42

Python對象函數(shù)

2024-09-06 17:55:27

Springboot開發(fā)

2023-04-18 14:53:48

2010-08-02 16:56:03

ICMP協(xié)議
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

亚洲一区成人| 欧美自拍偷拍一区二区| 国产精品欧美大片| 亚洲精品免费在线播放| 国产一区在线播放| 久久亚洲AV无码| 西野翔中文久久精品字幕| 91国产免费观看| 国产又大又长又粗又黄| 亚洲免费黄色片| 天堂影院一区二区| 欧美精品中文字幕一区| 五级黄高潮片90分钟视频| 日韩av黄色| 亚洲国产日韩在线一区模特 | 国产精品一区二区精品视频观看| 亚洲成人动漫在线观看| 亚洲二区三区四区| 成人乱码一区二区三区| 日韩成人免费在线| 久久国产精品久久久久久| 国产探花一区二区三区| av在线一区不卡| 午夜精品久久久久久久久| 亚洲最大免费| 免费在线一级视频| 国内成人精品2018免费看| 欧美一级大胆视频| 久久久久久久麻豆| 麻豆精品少妇| 欧美一区二区播放| 色国产在线视频| 久久人体大尺度| 午夜天堂影视香蕉久久| 欧美日韩一区二区三区电影| 国产爆初菊在线观看免费视频网站| 国产成+人+日韩+欧美+亚洲| 国产精品精品视频| 亚洲欧美一区二区三区在线观看| 激情久久综合| 中文字幕欧美国内| 国产成人精品无码免费看夜聊软件| 动漫一区二区三区| 在线成人免费观看| 最新天堂中文在线| 99re66热这里只有精品4| 福利一区福利二区微拍刺激| 超碰成人免费在线| 动漫性做爰视频| 日本另类视频| 色婷婷综合中文久久一本| 日韩黄色片在线| 亚洲第一图区| 夜夜精品浪潮av一区二区三区| 韩国黄色一级大片| 精品孕妇一区二区三区| 日本免费在线视频不卡一不卡二| 欧美激情免费观看| 人人人妻人人澡人人爽欧美一区| 亚洲成人a级片| 色狠狠综合天天综合综合| 丰满人妻一区二区三区53号| 成人国产免费电影| 亚洲精品高清在线| 欧美大黑帍在线播放| 麻豆av在线播放| 亚洲一区在线观看免费| h无码动漫在线观看| 丁香高清在线观看完整电影视频| 亚洲成av人在线观看| 成人黄色av免费在线观看| 欧美mv日韩mv国产网站app| 91成人在线观看喷潮教学| 国产99在线| 五月综合激情婷婷六月色窝| 国产极品粉嫩福利姬萌白酱| 国产精品字幕| 91精品国产色综合久久不卡蜜臀| 自拍日韩亚洲一区在线| av片在线观看网站| 豆国产96在线|亚洲| 91亚色免费| 亚洲免费在线视频观看| 日本不卡一二三区黄网| 91精品啪aⅴ在线观看国产| www.av网站| 26uuu国产日韩综合| 久久综合毛片| 国产午夜精品一区理论片| 中文字幕欧美激情| 国产在线无码精品| 芒果视频成人app| 欧美卡1卡2卡| 美女伦理水蜜桃4| 九九久久电影| 在线免费观看成人短视频| 久久精品一区中文字幕| 精品一区二区不卡| 三区在线视频| 91蝌蚪porny九色| 中文字幕一区二区三区有限公司| 韩国日本一区| 欧美性xxxxxx少妇| 丰满少妇xbxb毛片日本| 欧美一区电影| 午夜欧美大片免费观看| 在线观看免费高清视频| 成人高清视频在线| 国产日韩欧美日韩| 色网站免费观看| 国产精品福利一区二区三区| 91xxx视频| 吞精囗交69激情欧美| 欧美va天堂va视频va在线| 黄免费在线观看| 亚洲九九精品| 成人观看高清在线观看免费| 成人免费视频国产免费麻豆| 国产精品高潮呻吟久久| 欧美私人情侣网站| 国产精品美女在线观看直播| 在线一区二区视频| 成人免费xxxxx在线视频| 91成人精品在线| 久久久国产精品免费| 中文国产成人精品久久一| 超碰97在线资源站| 91久久久精品国产| 午夜精品福利电影| 91精品国产乱码久久久久| 亚洲永久网站| 久久精品91久久香蕉加勒比| 欧美精品xxxxx| 国产精品三级| 久久亚洲精品成人| 麻豆视频在线观看| 国产在线播放一区| 午夜免费日韩视频| 在线观看免费国产视频| 国产精品69毛片高清亚洲| 日韩av第一页| 美州a亚洲一视本频v色道| 亚洲高清久久久| 制服.丝袜.亚洲.中文.综合懂| a天堂视频在线| 挪威xxxx性hd极品| 99精品在线看| 99精品在线观看视频| 国产在线xxxx| 日韩一区免费| 久久久黄色av| 免费视频一二三区| 国产成人亚洲精品青草天美| 日韩欧美一区二区三区久久婷婷| 影音先锋在线播放| 91久久国产最好的精华液| 午夜久久久久久久| 日韩精品免费视频一区二区三区| 免费99精品国产自在在线| 91丨porny丨在线中文 | 99国产精品无码| 久久影视一区| 国产区亚洲区欧美区| 黄色在线播放网站| 日韩手机在线导航| 九九热国产视频| 91丨porny丨蝌蚪视频| 欧美一级成年大片在线观看| 亚洲福利精品视频| sese综合| 一区二区三区亚洲| 97超碰国产在线| 中文字幕欧美三区| 1314成人网| 黄色一区二区三区四区| 国产精品日韩在线一区| 成人三级黄色免费网站| 欧美日韩精品在线播放| 日本福利视频一区| 日韩一区二区三区精品视频第3页 日韩一区二区三区精品 | 天天久久综合网| 五月久久久综合一区二区小说| 亚洲一区二区三区毛片| 18+视频在线观看| 亚洲精品国产精品久久清纯直播| 一二三不卡视频| 午夜天堂精品久久久久| 国产一区二区自拍| 台湾成人免费视频| 欧美尺度大的性做爰视频| 日韩中文字幕免费在线观看| 日日夜夜天天综合入口| 欧美二区三区的天堂| 久久久久久久9999| 免费黄网站欧美| 日韩精品欧美专区| 日韩av懂色| 亚州国产精品久久久| 欧美孕妇性xxxⅹ精品hd| 欧美群妇大交群的观看方式| 69xx绿帽三人行| 久久久www免费人成精品| 国产一级二级av| 亚洲一卡久久| 国产视频在线观看网站| 国产欧美亚洲精品a| 99视频在线免费观看| 日韩色淫视频| 久久久久成人精品| 888av在线| 亚洲国产精品va在线| 久久久久久无码午夜精品直播| 亚洲欧洲日韩av| 日本xxx在线播放| 国产a级毛片一区| 爱情岛论坛成人| 亚洲一区二区三区四区五区午夜 | 浪潮av一区| 亚洲欧美一区二区精品久久久| 亚洲成人精品女人久久久| 欧美艳星brazzers| 好看的av在线| 亚洲成人自拍偷拍| 欧美精品久久久久性色| 中文字幕制服丝袜一区二区三区| 成人网站免费观看| 成人久久18免费网站麻豆 | av不卡免费电影| 日本少妇xxx| 黑人巨大精品欧美黑白配亚洲| 国产日韩成人内射视频| 午夜在线观看免费一区| 无码人妻少妇伦在线电影| 中文精品久久| 日韩视频在线观看视频| 97精品在线| 日韩免费电影一区二区三区| 久久99久久人婷婷精品综合 | 国产剧情在线观看| 亚洲激情第一页| 天天干,夜夜操| 日韩欧美色电影| www.国产免费| 91麻豆精品国产91久久久久久久久| 做爰无遮挡三级| 欧美日韩午夜影院| 最近国语视频在线观看免费播放| 欧美性感一类影片在线播放| 日韩国产成人在线| 成人h在线观看| 欧美中文字幕视频| 在线天堂资源www在线污| 911国产网站尤物在线观看| 国产中文在线播放| 91精品国产91久久久久久| 91资源在线观看| 91精品国产免费久久久久久| 三级在线看中文字幕完整版| 2019中文字幕在线观看| 性欧美18~19sex高清播放| 欧美在线精品免播放器视频| 成人免费看视频网站| 国产精品久久久久一区二区| 久久99国产精品二区高清软件| 国产免费一区视频观看免费| 欧美一级做一级爱a做片性| 成人h视频在线| 日韩成人在线看| 国产精品播放| 一区二区导航| 亚洲一区在线直播| 欧美精品二区| 亚欧无线一线二线三线区别| 日韩精品一级中文字幕精品视频免费观看 | 成人精品久久av网站| 国产一区2区在线观看| 国产高清精品一区| 亚洲人成精品久久久 | 欧美婷婷在线| 男人揉女人奶房视频60分| 日本不卡一区二区三区 | 中文字幕欧美人妻精品| 欧美一区二区二区| 日本福利片高清在线观看| 一区二区欧美日韩视频| 成人在线视频亚洲| 欧美激情视频免费观看| 三上悠亚一区二区| 91欧美视频网站| 五月国产精品| 91精品国产吴梦梦| 欧美中文日韩| 欧美污在线观看| 久久亚区不卡日本| 欧美丰满熟妇bbbbbb| 富二代精品短视频| av中文字幕播放| 一个色综合导航| xxxx成人| 91美女片黄在线观看游戏| 亚洲涩涩av| www.国产二区| 麻豆国产欧美一区二区三区| 午夜视频在线观看国产| 国产精品黄色在线观看| 国产精品久久久久久99| 欧美一区二区免费| 精品成人一区二区三区免费视频| 九九精品视频在线| 99久久精品一区二区成人| 国产日韩精品一区观看| 国产精品久久久久无码av| 青青青青在线视频| 久久er99热精品一区二区| 国产三级视频网站| 亚洲国产三级在线| 国产乱人乱偷精品视频a人人澡| 亚洲男人天天操| av岛国在线| 99精品99久久久久久宅男| 国产精品一区二区99| 青娱乐自拍偷拍| 国产精品1024| 亚洲av无一区二区三区| 色视频欧美一区二区三区| 少妇高潮一区二区三区69| 欧美成人中文字幕在线| 成人97精品毛片免费看| 亚洲高清在线观看一区| 快she精品国产999| 中文字幕日韩三级片| 亚洲影院在线观看| 国产熟女一区二区三区五月婷 | 久久99精品久久久水蜜桃| 欧美日韩中文| 丰满人妻一区二区三区大胸 | 国产一区二区三区18| 成av人片在线观看www| 亚洲xxx自由成熟| 亚洲精品成人| 欧美色图校园春色| 亚洲欧美影音先锋| 一级做a爱片久久毛片| 中文字幕亚洲无线码在线一区| 国产极品久久久久久久久波多结野| 欧美精品123| 亚洲作爱视频| 亚洲av无码国产精品久久| 偷拍一区二区三区| 十八禁一区二区三区| 91av在线不卡| 亚洲资源网你懂的| 免费激情视频在线观看| 国产欧美日韩另类一区| 天天综合久久综合| 中文字幕一区二区三区电影| 欧美97人人模人人爽人人喊视频| 一区二区不卡在线观看| 精品一区二区免费| 国产女人18水真多毛片18精品| 日韩视频在线观看一区二区| 牛牛精品视频在线| 韩日午夜在线资源一区二区| 99国产精品私拍| 免费污网站在线观看| 欧美日韩久久一区| 成人影院www在线观看| www.成人av| 国产精品久久国产愉拍| 老熟妇一区二区| 欧美美女喷水视频| 女同视频在线观看| 久久精品午夜一区二区福利| 日韩电影在线看| 久久嫩草捆绑紧缚| 精品成人佐山爱一区二区| 天堂av中文在线观看| 亚洲一区不卡在线| 国产成人免费网站| 中文字幕一区在线播放| 日韩中文字幕国产| 99精品中文字幕在线不卡| 凹凸国产熟女精品视频| 国产精品乱人伦中文| 亚洲第九十九页| 日韩美女在线观看一区| 亚洲电影影音先锋| 亚洲 欧美 日韩在线| 欧美色欧美亚洲另类二区| 天堂成人av| 日韩三级电影| 懂色av一区二区夜夜嗨| 加勒比在线一区| 欧美成人中文字幕在线| 国产欧美高清视频在线| 四虎1515hh.com| 精品美女久久久久久免费| 91精品大全| 国产精品亚洲一区| 日本sm残虐另类|