最近在工作的时候遇到一个问题,我首先是拿到别人现成的代码,代码如下:
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'))
运行结果如下:
[dd_edw@BJHC-Client-144113 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)
输出结果:
[dd_edw@BJHC-Client-144113 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的数值:
[dd_edw@BJHC-Client-144113 zhang_dd_edw]$ echo $PYTHONPATH
:/software/edw/common/HiveTask/
瞬间明白了,原来是通过PYTHONPATH--->/software/edw/common/HiveTask/----->HiveTask模块的。
后来特意问了一下,之前环境变量里面确实有那么一个环境变量HIVE_TASK,只不过后来不用了,写到了
PYTHONPATH里面去了。