1. 程式人生 > >Python中模組的搜尋路徑例項講解

Python中模組的搜尋路徑例項講解

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裡面去了。