網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
前言
在Python中,import操作應(yīng)該算是最為頻繁和常見(jiàn)的,但同時(shí)也應(yīng)該是最核心需要搞清楚其工作原理的地方,比如,python是如何找到我希望導(dǎo)入的包的位置的,如果搞清楚了這個(gè)問(wèn)題,那我們后續(xù)有自定義的包,就可以放到電腦的任意路徑下,然后修改下import的搜索路徑信息,就可以找到我們自定義的包了,本文主要就是解決上面的疑問(wèn)。
一、模塊導(dǎo)入時(shí)路徑搜索機(jī)制
1.1 包導(dǎo)入搜索機(jī)制
python的import操作,其本質(zhì)類(lèi)似于我們?nèi)粘T陔娔X上搜索指定文件名的文件,只不過(guò),python一般不會(huì)像我們那樣,在本地磁盤(pán)全盤(pán)進(jìn)行搜索,而是有其自己的控制機(jī)制,可以控制搜索的范圍和順序,這樣可以保證效率,同時(shí)也可以做到一定程度的隔離,比如python創(chuàng)建虛擬的運(yùn)行環(huán)境,就是基于這個(gè)原理,不同虛擬運(yùn)行環(huán)境,python安裝路徑、import搜索路徑都是單獨(dú)隔離的,而常用的虛擬環(huán)境維護(hù)和創(chuàng)建工具,其核心也是通過(guò)修改python默認(rèn)安裝路徑、版本、包搜索路徑等信息達(dá)到目的的。
一般情況下,import時(shí),包搜索順序和范圍如下:
- 首先搜索運(yùn)行命令當(dāng)前文件夾,或者系統(tǒng)當(dāng)前工作文件夾(可通過(guò)命令修改cwd)
- 再搜索環(huán)境變量PYTHONPATH內(nèi)的文件路徑
- 最后搜索python安裝路徑內(nèi)的sitepackages文件夾(一般通過(guò)pip安裝的包,均會(huì)默認(rèn)放到這個(gè)文件夾下,當(dāng)然,也可簡(jiǎn)單的將自己的包放到這個(gè)文件夾下,這樣也無(wú)需改變搜索路徑)
1.2 修改搜索路徑
核心思路,即修改1.1中提到的三個(gè)搜索節(jié)點(diǎn)的值,即可改變 包導(dǎo)入時(shí)的搜索范圍
1.2.1 通過(guò)修改sys.path變量
sys.path變量,管理的是Python包搜索路徑內(nèi)所有文件夾路徑(即當(dāng)前文件夾、PYTHONPATH環(huán)境變量?jī)?nèi)的路徑、python默認(rèn)安裝路徑),該變量是個(gè)列表,可以通過(guò)sys.path.append或者sys.path.insert等方法,將自己希望導(dǎo)入時(shí)被搜索的路徑添加到該列表變量?jī)?nèi)即可。
不過(guò)該方法只會(huì)在運(yùn)行時(shí)生效,一旦退出,便失效。
1.2.2 通過(guò)修改PYTHONPATH環(huán)境變量
PYTHONPATH環(huán)境變量,是管理python包導(dǎo)入時(shí)的搜索路徑的變量,故可以通過(guò)向該環(huán)境變量?jī)?nèi)添加路徑的方式來(lái)修改搜索路徑,且該方法因?yàn)槭切薷牧谁h(huán)境變量,故也是永久的,且影響也是全局的。
針對(duì)Mac電腦,修改該環(huán)境變量的方法如下:
- 打開(kāi)~/.bashrc文件,如果沒(méi)有,則通過(guò)touch命令創(chuàng)建
- 在文件內(nèi)寫(xiě)上 export PYTHONPATH=your own dir :$PYTHONPATH,比如你希望將~/test路徑添加至該環(huán)境變量,則為 ?export PYTHONPATH=~/test :$PYTHONPATH
- 在命令行執(zhí)行 source ~/.bashrc(主要是讓系統(tǒng)重新加載運(yùn)行該文件,以使此次修改生效)
1.2.3 通過(guò)添加**.pth文件
以上兩個(gè)辦法,或者是臨時(shí)修改,或者就是全局修改影響面太大,第三種方式可謂兼具前兩種方法的特點(diǎn)。
可以在指定Python安裝目錄下的site-packages目錄文件夾內(nèi),添加一個(gè)**.pth文件,在該文件內(nèi)逐行添加自己希望被搜索的路徑即可。
附:臨時(shí)添加python搜索包路徑的方法
方法1:(先進(jìn)入python)
import sys
sys.path.append(‘路徑')
(這種方式僅對(duì)當(dāng)前python有效)
方法2:
export PYTHONPATH=路徑
(這種方式對(duì)所有的python有效)
總結(jié)
原文鏈接:https://blog.csdn.net/yifengchaoran/article/details/113576056
相關(guān)推薦
- 2022-05-21 ?python?中的條件判斷語(yǔ)句的使用介紹_python
- 2022-03-22 C語(yǔ)言寫(xiě)一個(gè)散列表_C 語(yǔ)言
- 2023-01-12 一文帶你入木三分地理解字符串KMP算法以及C++實(shí)現(xiàn)_C 語(yǔ)言
- 2022-03-30 android?RecyclerView添加footerview詳解_Android
- 2022-03-31 詳解C語(yǔ)言中的Static關(guān)鍵字_C 語(yǔ)言
- 2022-09-09 pycharm中創(chuàng)建sql文件及模板的過(guò)程_python
- 2022-08-22 python單元測(cè)試框架pytest介紹_python
- 2022-11-19 通過(guò)?C#/VB.NET?代碼將?Excel?工作表拆分為單獨(dú)的文件_C#教程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支