Python中模組的搜尋路徑例項講解
阿新 • • 發佈:2018-11-01
2018年3月1日13:26:09
最近在工作的時候遇到一個問題,我首先是拿到別人現成的程式碼,程式碼如下:
import os,sys,re
import datetime
import threading
import subprocess
import configparser
import sendmail
from loggers import myLog
sys.path.append(os.getenv('HIVE_TASK'))
from HiveTask import HiveTask
但是當我輸出'HIVE_TASK'環境變數的數值的時候,執行結果竟讓為None,如下所示:
#!/usr/bin/python
# -*- coding:utf-8 -*-
"""
function:本函式的功能是獲取表的location
"""
import os
import sys
print(os.getenv('HIVE_TASK'))
執行結果如下:
[[email protected] zhang_dd_edw]$ python3 test.py
None
當時第一反應,什麼情況,環境變數怎麼沒有,於是我改了一下指令碼:
import os,sys,re import datetime import threading import subprocess import configparser import sendmail from loggers import myLog from HiveTask import HiveTask
當我執行這個指令碼的時候發現竟然沒有報錯,也就是說可以找到HiveTask這個py檔案(模組),到底是怎麼找到的呢?
我查看了一下模組正常的搜尋路徑:
"""
function:本函式的功能是獲取表的location
"""
import os
import sys
for path in sys.path:
print(path)
輸出結果:
[[email protected] zhang_dd_edw]$ python3 test.py /home/dd_edw/zhang_dd_edw /home/dd_edw/zhang_dd_edw /software/edw/common/HiveTask /usr/local/lib/python32.zip /usr/local/lib/python3.2 /usr/local/lib/python3.2/plat-linux2 /usr/local/lib/python3.2/lib-dynload /usr/local/lib/python3.2/site-packages
可以看出HIVETASK這個模組應該是在/software/edw/common/HiveTask這個路徑下面,但是為什麼會找到這個路徑呢?
我們都知道模組正常的搜尋路徑:
第一:內建模組當中去搜索
第二:執行檔案所在的當前目錄
第三:環境變數PYATHONPATH指定的路徑列表中
第四:python安裝的lib庫中
於是我查看了一下環境變數PYATHONPATH的數值:
[[email protected] zhang_dd_edw]$ echo $PYTHONPATH
:/software/edw/common/HiveTask/
瞬間明白了,原來是通過PYTHONPATH--->/software/edw/common/HiveTask/----->HiveTask模組的。
後來特意問了一下,之前環境變數裡面確實有那麼一個環境變數HIVE_TASK,只不過後來不用了,寫到了
PYTHONPATH裡面去了。