Python模块搜索路径代码详解


Posted in Python onJanuary 29, 2018

简述

由于某些原因,在使用 import 时,Python 找不到相应的模块。这时,解释器就会发牢骚 - ImportError。

那么,Python 如何知道在哪里搜索模块的路径呢?

模块搜索路径

当导入名为 hello 的模块时,解释器首先搜索具有该名称的内置模块。如果没有找到,将在变量 sys.path 给出的目录列表中搜索名为 hello.py 的文件。

sys.path 从这些位置初始化:

包含输入脚本的目录(或当前目录,当没有指定文件时)
PYTHONPATH(目录名列表,与 shell 变量 PATH 语法相同)
与安装相关的默认值

>>> import sys
>>> sys.path
['', '/usr/local/lib/python35.zip', '/usr/local/lib/python3.5', '/usr/local/lib/python3.5/plat-linux',
 '/usr/local/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/site-packages']

注意: '' 表示当前目录(当前脚本所在的路径)

例如,在 /home/wang/workspace 中创建一个名为 hello.py 的模块,内容如下:

print('Hello')

然后,试图加载该模块:

>>> import os
>>> 
>>> os.getcwd() # 获取当前目录
'/home/wang'
>>> 
>>> import hello.py
...
ImportError: No module named 'hello'

很遗憾,由于 sys.path 中没有包含 /home/wang/workspace 这个路径,所以找不到 hello 模块,从而引发 ImportError。

添加模块搜索路径

为了解决上述问题,需要添加模块搜索路径,可以使用以下几种方式:

1.动态增加路径

临时生效,对于不经常使用的模块,这通常是最好的方式,因为不必用所有次要模块的路径来污染 PYTHONPATH。

2.修改 PYTHONPATH 变量

永久生效,对于在许多程序中都使用的模块,可以采用这种方式。这将改变所有 Python 应用的搜索路径,因为启动 Python 时,它会读取这个变量,甚至不同版本的 Python 都会受影响。

3.增加 .pth 文件

永久生效,这是最简单的、也是推荐的方式。Python 在遍历已知的库文件目录过程中,如果遇到 .pth 文件,便会将其中的路径加入到 sys.path 中,于是 .pth 中所指定的路径就可以被 Python 运行环境找到了。

动态增加路径

通过 sys 模块的 append() 方法在 Python 环境中增加搜索路径:

>>> import sys
>>> sys.path.append('/home/wang/workspace')

现在,查看搜索路径:

>>> sys.path
['', '/usr/local/lib/python35.zip', '/usr/local/lib/python3.5', '/usr/local/lib/python3.5/plat-linux',
 '/usr/local/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/site-packages', '/home/wang/workspace']
>>> 
>>> import hello
Hello

可以看到,路径被成功添加进去了,再次执行导入可以正常使用。

修改 PYTHONPATH 变量

打开并编辑 bashrc:

$ vim ~/.bashrc

将以下内容附加到文件末尾:

export PYTHONPATH=$PYTHONPATH:/home/wang/workspace

不要忘记重新加载 shell,方法是退出并重新启动,或者在命令行重新加载配置文件:

$ source ~/.bashrc # 或者 . ~/.bashrc

增加 .pth 文件

在 /usr/local/lib/python3.5/site-packages 下添加一个扩展名为 .pth 的配置文件(例如:extras.pth),内容为要添加的路径:

/home/wang/workspace

总结

以上就是本文关于Python模块搜索路径代码详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
可用于监控 mysql Master Slave 状态的python代码
Feb 10 Python
pyqt4教程之实现windows窗口小示例分享
Mar 07 Python
Python 中的with关键字使用详解
Sep 11 Python
Python中的id()函数指的什么
Oct 17 Python
python中的内置函数max()和min()及mas()函数的高级用法
Mar 29 Python
python实现在cmd窗口显示彩色文字
Jun 24 Python
python3在同一行内输入n个数并用列表保存的例子
Jul 20 Python
解决django 新增加用户信息出现错误的问题
Jul 28 Python
Python facenet进行人脸识别测试过程解析
Aug 16 Python
python导入不同目录下的自定义模块过程解析
Nov 18 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
Dec 20 Python
python 装饰器的实际作用有哪些
Sep 07 Python
python机器人行走步数问题的解决
Jan 29 #Python
python的socket编程入门
Jan 29 #Python
Python 错误和异常代码详解
Jan 29 #Python
python实现机器人行走效果
Jan 29 #Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 #Python
Python实现识别手写数字 简易图片存储管理系统
Jan 29 #Python
详解Python自建logging模块
Jan 29 #Python
You might like
yii实现级联下拉菜单的方法
2014/07/31 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
php实现当前页面点击下载文件的简单方法
2016/09/22 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
Yii2中datetime类的使用
2016/12/17 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
2019/05/29 PHP
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
JavaScript 大数据相加的问题
2011/08/03 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
js操作label给label赋值及取label的值示例
2013/11/07 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
2016/08/01 Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
2018/11/01 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
[57:37]EG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
多版本Python共存的配置方法
2017/05/22 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
对Python3中列表乘以某一个数的示例详解
2019/07/20 Python
python requests更换代理适用于IP频率限制的方法
2019/08/21 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
2020/07/02 Python
python如何调用百度识图api
2020/09/29 Python
网页切图的CSS和布局经验与要点
2015/04/09 HTML / CSS
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
在什么时候需要使用"常引用"
2015/12/31 面试题
人事行政主管岗位职责
2013/12/22 职场文书
党员对照检查材料思想汇报
2014/09/16 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
购房委托书
2014/10/15 职场文书
2015年煤矿工作总结
2015/04/28 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书