赞
踩
最近在工作的时候遇到一个问题,我首先是拿到别人现成的代码,代码如下:
- 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里面去了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。