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科学计算环境推荐——Anaconda
Jun 30 Python
在Python中操作文件之read()方法的使用教程
May 24 Python
让python在hadoop上跑起来
Jan 27 Python
使用C++扩展Python的功能详解
Jan 12 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
Aug 03 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
python清空命令行方式
Jan 13 Python
python异常处理try except过程解析
Feb 03 Python
Python3实现飞机大战游戏
Apr 24 Python
python:删除离群值操作(每一行为一类数据)
Jun 08 Python
Python 字典中的所有方法及用法
Jun 10 Python
详解Python内置模块Collections
Mar 22 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实现简单洗牌算法
2013/06/18 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
2014/08/14 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
2011/01/08 Javascript
js中document.getElementByid、document.all和document.layers区分介绍
2011/12/08 Javascript
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
Node.js事件驱动
2015/06/18 Javascript
jQuery实现简单下拉导航效果
2015/09/07 Javascript
jquery日历插件datepicker用法分析
2016/01/22 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
webpack入门+react环境配置
2017/02/08 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
vue全局组件与局部组件使用方法详解
2018/03/29 Javascript
详解如何提升JSON.stringify()的性能
2019/06/12 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
vue脚手架项目创建步骤详解
2021/03/02 Vue.js
Python分支结构(switch)操作简介
2018/01/17 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
Python获取Redis所有Key以及内容的方法
2019/02/19 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
CSS3 实现的火焰动画
2020/12/07 HTML / CSS
苹果台湾官网:Apple台湾
2019/01/05 全球购物
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
外企办公室竞聘演讲稿
2013/12/29 职场文书
高一化学教学反思
2014/02/05 职场文书
南京市纪委监察局整改方案
2014/09/16 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
2015年法律事务部工作总结
2015/07/27 职场文书