sys.path總結

在Python代碼中, 文件的一開始幾乎無一例外地是

一大堆的import. 語義很好理解, 這是引用了這個文件需要的依賴. 但是大家有沒有想過, Python是如何找到這些被引用的包的呢? 這些被引用的包又實際上放置在哪里呢?
對于Python在哪里找到需要引用的包, 事實上Python提供了一個接口, 來獲得Python查找路徑的列表. 示例如下(去試試>>>)

運行這幾行代碼, 得到如下的結果.

對于這個結果,把它們分為幾類來講解

第一類, 很顯然, 這些路徑是Python安裝時內(nèi)置進去的.

第二類, 都是放在第一類的路徑中, 但是一眼就能看出它們其實都不是Python自帶的東西, 而是后安裝進去的.

這類路徑能夠讓Python納入搜索的范圍, 要歸功于一種特殊的文件, .pth文件. Python在搜索模塊的過程中, 如果遇到了.pth文件, 則將.pth文件中所羅列的路徑也納入到搜索路徑中來. 下面是一個.pth文件的示例


可以確定的是那兩行代碼完全可以沒有,可以直接羅列路徑就行了,絕對路徑 相對路徑都可以.甚至可以簡單地只有一行.第三類, 就是當前路徑. 這里的當前路徑是'/home/cliu/test'. Python搜索包的順序是按照sys.path輸出的列表的順序進行的, 并且搜索到第一個匹配的包即停止. 所以可以看出, 當前路徑是第一個搜索的路徑, 當前路徑中的包具有覆蓋所有其他包的能力. 如果你在當前路徑下放置了一個datetime.py, 那么你的標準庫datetime模塊就不能用了( ⊙o⊙ )哇, 所以起名字一定要謹慎, 不要與系統(tǒng)中其他的包重名.講完了Python搜索路徑的規(guī)則, 接下來我們講講如何改變這個規(guī)則.(與天斗, 與地斗, 與階級敵人斗)
哈哈, 這太簡單了. 既然搜索路徑存放在sys.path, 那我們就改變這個變量就好了. 對于Python這樣的動態(tài)語言, 并沒有什么只讀這回事.

我們來驗證一下, 把sys.path置為空列表, 是不是就什么包都找不到了呢?(去試試>>>)


看起來并不是這樣, 標準庫還是找得到的, 第三方庫確實統(tǒng)統(tǒng)找不到了. (果然官方還是要吃小炤的)

不過不必在意這個例子, 實際業(yè)界實踐中你永遠也不用這么做. 下面這段代碼才是你最常用的:


這段代碼經(jīng)常被用在Python腳本的最開始, 用來設置腳本需要引用的包的查找位置.除了設置sys.path, 還有一種改變搜索路徑的常用辦法, 那就是PYTHONPATH. PYTHONPATH是一個環(huán)境變量, 通常我們使用這個句子來改變它
當然,你也可以把自己的搜索路徑放在前面.

PYTHONPATH為程序的部署提供了更好的靈活性, 你會發(fā)現(xiàn), 幾乎所有的Python部署工具, Python程序監(jiān)控工具都使用PYTHONPATH來配置搜索路徑.
聰明的你可能還想到了我們前面講的.pth文件*. 對, 創(chuàng)建一個.pth文件, 放置到默認路徑里, 同樣可以達到增加搜索路徑的目的. 不過, 這很不常用. 向系統(tǒng)中注入自己的代碼不是一個好的實踐, 除非你本身就是開發(fā)系統(tǒng), 或者中間件的程序員.到此, 你對于Python如何搜索需要的包已經(jīng)有足夠的了解了, 可以向更高的山峰攀登(≧▽≦)/啦啦啦

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逸绎,一起剝皮案震驚了整個濱河市谬擦,隨后出現(xiàn)的幾起案子瞬矩,更是在濱河造成了極大的恐慌脊串,老刑警劉巖蒋搜,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阱持,死亡現(xiàn)場離奇詭異凡橱,居然都是意外死亡呛踊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門即纲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來具帮,“玉大人,你說我怎么就攤上這事低斋》涮” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵膊畴,是天一觀的道長掘猿。 經(jīng)常有香客問我,道長唇跨,這世上最難降的妖魔是什么稠通? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮买猖,結果婚禮上改橘,老公的妹妹穿的比我還像新娘。我一直安慰自己玉控,他們只是感情好飞主,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著高诺,像睡著了一般碌识。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上虱而,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天筏餐,我揣著相機與錄音,去河邊找鬼薛窥。 笑死胖烛,一個胖子當著我的面吹牛眼姐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播佩番,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼众旗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了趟畏?” 一聲冷哼從身側(cè)響起贡歧,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赋秀,沒想到半個月后利朵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡猎莲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年绍弟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片著洼。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡樟遣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出身笤,到底是詐尸還是另有隱情豹悬,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布液荸,位于F島的核電站瞻佛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏娇钱。R本人自食惡果不足惜伤柄,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望忍弛。 院中可真熱鬧响迂,春花似錦、人聲如沸细疚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疯兼。三九已至,卻和暖如春贫途,著一層夾襖步出監(jiān)牢的瞬間吧彪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工丢早, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留姨裸,地道東北人秧倾。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像傀缩,于是被迫代替她去往敵國和親那先。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容