Python模块搜索路径代码详解

yipeiwu_com7年前Python基础

简述

由于某些原因,在使用 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字符串内置函数功能与用法。分享给大家供大家参考,具体如下: 字符串内置总结 需要注意的是: 字符串的单引号和双引号都无法取消特殊字符的含义,如果想让引号内...

Python合并字典键值并去除重复元素的实例

假设在python中有一字典如下: x={‘a':'1,2,3', ‘b':'2,3,4'} 需要合并为: x={‘c':'1,2,3,4'} 需要做到三件事: 1. 将字符串转化为数...

对python中的 os.mkdir和os.mkdirs详解

创建目录 在Python中可以使用os.mkdir()函数创建目录(创建一级目录)。 其原型如下所示: os.mkdir(path) 其参数path 为要创建目录的路径。 例如要在...

如何搜索查找并解决Django相关的问题

1. 卡住是怎么办 按照以下步骤, 前提是你需要懂点英文: 尽可能自己想办法解决 仔细阅读相关文档, 确保不错过任何相关内容 在Google, 百度, mailing lists或Sta...

Python 3.6 -win64环境安装PIL模块的教程

Python 3.6 -win64环境安装PIL模块的教程

PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。 由于PIL仅支持到Python 2.7...