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 相关文章推荐
深入解析Python编程中super关键字的用法
Jun 24 Python
python中异常报错处理方法汇总
Nov 20 Python
恢复百度云盘本地误删的文件脚本(简单方法)
Oct 21 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
Mar 29 Python
python+os根据文件名自动生成文本
Mar 21 Python
python实现批量处理将图片粘贴到另一张图片上并保存
Dec 12 Python
python重要函数eval多种用法解析
Jan 14 Python
基于TensorBoard中graph模块图结构分析
Feb 15 Python
Python OrderedDict字典排序方法详解
May 21 Python
python实现邮件循环自动发件功能
Sep 11 Python
python 实现定时任务的四种方式
Apr 01 Python
python 镜像环境搭建总结
Sep 23 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
PHP中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
2014/08/21 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
2016/04/07 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
javascript 当前日期转化为中文的实现代码
2010/05/13 Javascript
jquery()函数的三种语法介绍
2013/10/09 Javascript
获取当前点击按钮的id用this.id实现
2014/03/17 Javascript
分享一款基于jQuery的视频播放插件
2014/10/09 Javascript
javascript中传统事件与现代事件
2015/06/23 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
总结Node.js中的一些错误类型
2016/08/15 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
2016/09/14 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
Webpack打包慢问题的完美解决方法
2017/03/16 Javascript
Node.js+Express+MySql实现用户登录注册功能
2017/07/10 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
2017/11/29 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
2020/02/15 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
2020/12/29 Javascript
[02:04]2014DOTA2国际邀请赛 DK一个时代的落幕
2014/07/21 DOTA
Python天气预报采集器实现代码(网页爬虫)
2012/10/07 Python
高性能web服务器框架Tornado简单实现restful接口及开发实例
2014/07/16 Python
在Python中操作列表之List.append()方法的使用
2015/05/20 Python
Django中create和save方法的不同
2019/08/13 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
2020/07/02 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
美国女孩洋娃娃店:American Girl
2017/10/24 全球购物
SQL注入攻击的种类有哪些
2013/12/30 面试题
信息专业学生学习的自我评价
2014/02/17 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
2015年幼儿园国庆节活动总结
2015/07/30 职场文书
国际最新研究在陨石中发现DNA主要成分 或由陨石带来地球
2022/04/29 数码科技