关于python import的sys.path路径问题
關(guān)于python import的sys.path路徑問題
sys.path
先說一下 sys.path 這個(gè)變量,該變量需要導(dǎo)入 sys 官方庫方可使用,它是一個(gè)列表,是當(dāng)前 python 文件 import 庫時(shí)會(huì)逐個(gè)搜索列表中的路徑。
初始化
sys.path 從這些位置初始化:
- 包含輸入腳本的目錄(或當(dāng)前目錄,當(dāng)沒有指定文件時(shí))
- PYTHONPATH(目錄名列表,與 shell 變量 PATH 語法相同)
- 與安裝相關(guān)的默認(rèn)值(比如當(dāng)前conda環(huán)境的路徑)
添加
為了解決上述問題,需要添加模塊搜索路徑,可以使用以下幾種方式:
-
動(dòng)態(tài)增加路徑
臨時(shí)生效,對(duì)于不經(jīng)常使用的模塊,這通常是最好的方式,因?yàn)椴槐赜盟写我K的路徑來污染 PYTHONPATH。
import sys sys.path.append('/home/song/mylib') -
修改 PYTHONPATH 變量
永久生效,對(duì)于在許多程序中都使用的模塊,可以采用這種方式。這將改變所有 Python 應(yīng)用的搜索路徑,因?yàn)閱?dòng) Python 時(shí),它會(huì)讀取這個(gè)變量,甚至不同版本的 Python 都會(huì)受影響。
export PYTHONPATH=$PYTHONPATH:/home/song/mylib直接命令行執(zhí)行則當(dāng)前終端生效,或添加到 ~/.bashrc 中并 source 永久生效。
-
增加 .pth 文件
永久生效,這是最簡單的、也是推薦的方式。Python 在遍歷已知的庫文件目錄過程中,如果遇到 .pth 文件,便會(huì)將其中的路徑加入到 sys.path 中,于是 .pth 中所指定的路徑就可以被 Python 運(yùn)行環(huán)境找到了。
在 /usr/local/lib/python3.5/site-packages 下添加一個(gè)擴(kuò)展名為 .pth 的配置文件(例如:extras.pth),內(nèi)容為要添加的路徑:/home/song/mylib 。
例子
考慮這樣一個(gè)目錄結(jié)構(gòu),他基本涵蓋我們 python 文件 import 自定義庫時(shí)的情況:
. ├── lib1.py ├── t1 │?? ├── lib0.py │?? └── test.py └── t2└── lib2.py我們的 test.py 想要 import lib0、1、2.py 三個(gè)庫文件,并且,我們要考慮在 test.py 的當(dāng)前目錄運(yùn)行(python test.py) 或其父目錄運(yùn)行(python t1/test.py)時(shí),分別應(yīng)該怎么做呢?
導(dǎo)入lib0
當(dāng)前目錄運(yùn)行
首先要明確,我們的 python 程序在考慮相對(duì)路徑時(shí),考慮的是文件所在目錄的相對(duì)路徑,而不是工作目錄的路徑。所以我們直接導(dǎo)入即可:
import lib0父目錄運(yùn)行
剛才提到這不受到工作目錄影響,所以同上。
導(dǎo)入lib1
當(dāng)前目錄運(yùn)行
我們都知道,要導(dǎo)入上級(jí)目錄的文件,可以通過在 sys.path 中追加上級(jí)目錄 .. 來實(shí)現(xiàn)。另一個(gè)關(guān)鍵點(diǎn)就在這里,sys.path 中的相對(duì)路徑是相對(duì)工作目錄而言的,而不是相對(duì)文件所在目錄。因此我們?cè)诋?dāng)前目錄運(yùn)行時(shí):
import sys sys.append('..')import lib1運(yùn)行:python test.py。
父目錄運(yùn)行
注意這里就有所不同了,因?yàn)?sys.path 是相對(duì)工作目錄而言的,我們?cè)诟改夸涍\(yùn)行程序,工作目錄變化了,因此應(yīng)該:
import sys sys.append('.')import lib1導(dǎo)入lib2
實(shí)際導(dǎo)入 lib2 就與導(dǎo)入 lib1 類似,只是多一級(jí)即可
當(dāng)前目錄運(yùn)行
import sys sys.append('..')import t2.lib1父目錄運(yùn)行
import sys sys.append('.')import t2.lib1Ref:
Python 模塊搜索路徑
總結(jié)
以上是生活随笔為你收集整理的关于python import的sys.path路径问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国国际航空公司的机长有住上海的吗
- 下一篇: python 安装html,python