您的位置:首页 > 编程语言 > Python开发

Python中模块的搜索路径实例讲解

2018-03-01 13:33 2091 查看
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'))运行结果如下:[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里面去了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: