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高级应用实例对比:高效计算大文件中的最长行的长度
Jun 08 Python
Python 和 JS 有哪些相同之处
Nov 23 Python
Python实现按照指定要求逆序输出一个数字的方法
Apr 19 Python
djang常用查询SQL语句的使用代码
Feb 15 Python
python3的数据类型及数据类型转换实例详解
Aug 20 Python
wxPython之wx.DC绘制形状
Nov 19 Python
Python实现图片添加文字
Nov 26 Python
python encrypt 实现AES加密的实例详解
Feb 20 Python
python使用多线程+socket实现端口扫描
May 28 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
Jun 09 Python
python开发实时可视化仪表盘的示例
May 07 Python
python 算法题——快乐数的多种解法
May 27 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 危险函数全解析
2009/09/09 PHP
php判断正常访问和外部访问的示例
2014/02/10 PHP
PHP获取某个月最大天数(最后一天)的方法
2015/07/29 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
2017/05/20 PHP
arguments对象
2006/11/20 Javascript
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
offsetHeight在OnLoad中获取为0的现象
2013/07/22 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
2016/01/25 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
JQuery页面随滚动条动态加载效果的简单实现(推荐)
2017/02/08 Javascript
详解Weex基于Vue2.0开发模板搭建
2017/03/20 Javascript
基于Vue生产环境部署详解
2017/09/15 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
2018/01/25 Javascript
移动端图片上传旋转、压缩问题的方法
2018/10/16 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
Vue使用axios引起的后台session不同操作
2020/08/14 Javascript
原生JavaScript实现弹幕组件的示例代码
2020/10/12 Javascript
Vue.extend 登录注册模态框的实现
2020/12/29 Vue.js
node使用async_hooks模块进行请求追踪
2021/01/28 Javascript
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
基于Python实现对PDF文件的OCR识别
2016/08/05 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
老生常谈python中的重载
2018/11/11 Python
python3人脸识别的两种方法
2019/04/25 Python
面向新手解析python Beautiful Soup基本用法
2020/07/11 Python
大学毕业登记表自我鉴定
2013/10/09 职场文书
优秀毕业生求职推荐信范文
2013/11/21 职场文书
职业生涯规划书的格式
2013/12/29 职场文书
企业爱岗敬业演讲稿
2014/09/04 职场文书
超市开业庆典活动策划方案
2014/09/15 职场文书
2015年园林绿化工作总结
2015/05/23 职场文书
初一军训感言
2015/08/01 职场文书
初一数学教学反思
2016/02/17 职场文书
2016民族团结先进个人事迹材料
2016/02/26 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书