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 相关文章推荐
简单的Apache+FastCGI+Django配置指南
Jul 22 Python
Windows下Python使用Pandas模块操作Excel文件的教程
May 31 Python
Python中循环后使用list.append()数据被覆盖问题的解决
Jul 01 Python
Python使用dict.fromkeys()快速生成一个字典示例
Apr 24 Python
Django后端接收嵌套Json数据及解析详解
Jul 17 Python
Python之数据序列化(json、pickle、shelve)详解
Aug 30 Python
Python序列类型的打包和解包实例
Dec 21 Python
Python中filter与lambda的结合使用详解
Dec 24 Python
pytorch程序异常后删除占用的显存操作
Jan 13 Python
Python实现AI换脸功能
Apr 10 Python
如何理解python对象
Jun 21 Python
教你用python实现一个无界面的小型图书管理系统
May 21 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
了解咖啡雨林联盟认证 什么是雨林认证 雨林认证是什么意思
2021/03/05 新手入门
PHP中的traits实现代码复用使用实例
2015/05/13 PHP
经验几则 推荐
2006/09/05 Javascript
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
2010/04/01 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
2013/04/08 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
2016/06/07 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
利用jquery如何从json中读取数据追加到html中
2017/12/01 jQuery
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
JavaScript中var、let、const区别浅析
2018/06/24 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
2019/09/16 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
如何解决vue在ios微信"复制链接"功能问题
2020/03/26 Javascript
JavaScript设计模式---单例模式详解【四种基本形式】
2020/05/16 Javascript
Python 深入理解yield
2008/09/06 Python
python实现定制交互式命令行的方法
2014/07/03 Python
Python中字典的基本知识初步介绍
2015/05/21 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
通过实例解析Python调用json模块
2019/12/11 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
将keras的h5模型转换为tensorflow的pb模型操作
2020/05/25 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
2021/01/05 Python
html5与css3小应用
2013/04/03 HTML / CSS
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
学生党员思想汇报
2013/12/28 职场文书
儿媳婚宴答谢词
2014/01/14 职场文书
四个太阳教学反思
2014/02/01 职场文书
消防战士优秀事迹材料
2014/02/13 职场文书
授权委托书协议书
2014/10/16 职场文书
工作经验交流材料
2014/12/30 职场文书
不同意离婚答辩状
2015/05/22 职场文书
学校就业保障协议书
2019/06/24 职场文书
python爬取企查查企业信息之selenium自动模拟登录企查查
2021/04/08 Python