首页 / 知识
python模块搜索路径
2023-11-12 13:35:00
在a.py中导入模块b的时候,python会做一系列的模块文件路径搜索操作:b.py在哪里?只有找到它才能读取、运行(装载)该模块。
在任何一个python程序启动时,都会将模块的搜索路径收集到sys模块的path属性中(sys.path)。当python需要搜索模块文件在何处时,首先搜索内置模块,如果不是内置模块,则搜索sys.path中的路径列表,搜索时会从该属性列出的路径中按照从前向后的顺序进行搜索,并且只要找到就立即停止搜索该模块文件(也就是说不会后搜索的同名模块覆盖先搜索的同名模块)。
例如,在a.py文件中输出一下这个属性的内容:
#a.py:
importsys
print(sys.path)
结果:
['G:\\pycode','C:\\ProgramFiles(x86)\\Python36-32\\python36.zip','C:\\ProgramFiles(x86)\\Python36-32\\DLLs','C:\\ProgramFiles(x86)\\Python36-32\\lib','C:\\ProgramFiles(x86)\\Python36-32','C:\\Users\\malong\\AppData\\Roaming\\Python\\Python36\\site-packages','C:\\ProgramFiles(x86)\\Python36-32\\lib\\site-packages']
python模块的搜索路径包括几个方面,按照如下顺序搜索:
程序文件(a.py)所在目录,即G:\\pycode
环境变量PYTHONPATH所设置的路径(如果定义了该环境变量,则从左向右的顺序搜索)
标准库路径
.pth文件中定义的路径
需要注意,上面sys.path的结果中,除了.zip是一个文件外,其它的搜索路径全都是目录,也就是从这些目录中搜索模块X的文件X.py是否存在。
程序所在目录
这个目录是最先搜索的,且是python自动搜索的,无需对此进行任何设置。从交互式python程序终输出sys.path的结果:
>>>sys.path
['','C:\\WINDOWS\\system32','C:\\ProgramFiles(x86)\\Python36-32\\Lib\\idlelib','C:\\ProgramFiles(x86)\\Python36-32\\python36.zip','C:\\ProgramFiles(x86)\\Python36-32\\DLLs','C:\\ProgramFiles(x86)\\Python36-32\\lib','C:\\ProgramFiles(x86)\\Python36-32','C:\\Users\\malong\\AppData\\Roaming\\Python\\Python36\\site-packages','C:\\ProgramFiles(x86)\\Python36-32\\lib\\site-packages']
其中第一个''表示的就是程序所在目录。
注意程序所在目录和当前目录是不同的。例如,在/tmp/目录下执行/pycode中的a.py文件
cd/tmp
python/pycode/a.py
其中/tmp为当前目录,而/pycode是程序文件a.py所在的目录。如果a.py中导入b.py,那么将首先搜索/pycode,而不是/tmp。
环境变量PYTHONPATH
这个变量中可以自定义一系列的模块搜索路径列表,这样可以跨目录搜索(另一种方式是设置.pth文件)。但默认情况下这个环境变量是未设置的。
在windows下,设置PYTHONPATH环境变量的方式:命令行中输入:SystemPropertiesAdvanced-->环境变量-->系统环境变量新建
如果是多个路径,则使用英文格式的分号分隔。以下是临时设置当前命令行窗口的PYTHONPATH:
setPYTHONPATH='D:\pypath;d:\pypath1'
在unix下,设置PYTHONPATH环境变量的方式,使用冒号分隔多个路径:另外,必须得export导出为环境变量
exportPYTHONPATH=/tmp/pypath1:/tmp/pypath2
如果要永久生效,则写入配置文件中:
echo'exportPYTHONPATH=/tmp/pypath1:/tmp/pypath2'>/etc/profile.d/pypth.sh
chmod+x/etc/profile.d/pypth.sh
source/etc/profile.d/pypth.sh
标准库路径
在Linux下,标准库的路径一般是在/usr/lib/pythonXXX/下(XXX表示python版本号),此目录下有些分了子目录。
例如:
['','/usr/lib/python35.zip','/usr/lib/python3.5','/usr/lib/python3.5/plat-x86_64-linux-gnu','/usr/lib/python3.5/lib-dynload','/usr/local/lib/python3.5/dist-packages','/usr/lib/python3/dist-packages']
其中/usr/lib/python3.5和其内的几个子目录都是标准库的搜索路径。
注意其中/usr/lib/python35.zip,它是ZIP文件组件,当定义此文件为搜索路径时,将自动解压缩该文件,并从此文件中搜索模块。
Windows下根据python安装位置的不同,标准库的路径不同。如果以默认路径方式安装的python,则标准库路径为C:\\ProgramFiles(x86)\\Python36-32及其分类的子目录。
.pth文件自定义路径
可以将自定义的搜索路径放进一个.pth文件中,每行一个搜索路径。然后将.pth文件放在python安装目录或某个标准库路径内的sitepackages目录下即可。
这是一种替换PYTHONPATH的友好方式,因为不同操作系统设置环境变量的方式不一样,而以文件的方式记录是所有操作系统都通用的。
例如,windows下,在python安装目录C:\\ProgramFiles(x86)\\Python36-32下新增一个mypath.pth文件,内容如下:
d:\pypath1
d:\pypath2
再去输出sys.path,将可以看到这两个路径已经放进了搜索列表中。
修改搜索路径
除了上面环境变量和.pth文件,还可以直接修改sys.path或者site.getsitepackages()的结果。
例如,在import导入sys模块之后,可以修改sys.path,向这个列表中添加其它搜索路径,这样之后导入其它模块的时候,也会搜索该路径。
例如:
importsys
sys.path.append('d:\\pypath3')
print(sys.path)
sys.path的最后一项将是新添加的路径。
以上内容为大家介绍了python模块搜索路径,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注我们
最新内容
相关内容
Python 之模块重载的五种方法
Python 之模块重载的五种方法,环境,培训,方法,模块,文件夹,例子,下面,内容,语句,请看,python环境准备新建一个foo文件夹,其下包含一个bar.py文Python标准库之collections模块
Python标准库之collections模块,名字,标准,信息,电话号码,培训,工厂,位置,简介,异常,对象,collections模块简介collections是Python标准库里Python模块化有哪些好处?
Python模块化有哪些好处?,管理,代码,软件,汽车,培训,复杂度,模块,功能,程序,好处,当然,如果不将程序分解成一个个独立的部分,而是整个一大坨,也Python文件读取相关方法
Python文件读取相关方法,数据,位置,文件,中行,培训,方法,字节,内容,结果,字符串,我们知道,对文件的读取操作需要将文件中的数据加载到内存中,而如何在 python 中打开文件?
如何在 python 中打开文件?,名称,单位,培训,模式,文件,表示,缓存,路径,函数,定义,使用内置函数open就可以打开文件。先来看下python中对openPython可执行文件和模块
Python可执行文件和模块,标准,培训,模块,文件,属性,上面,内容,变量,函数,源码,python源代码文件按照功能可以分为两种类型:用于执行的可执行程Python查看模块中的属性
Python查看模块中的属性,名称,标准,环境,培训,属性,模块,对象,函数,定义,变量,内置函数dir可用于列出某模块中定义了哪些属性(全局名称空间)Python系统互动
Python系统互动,互动,系统,管理,通信,标准,管理系统,培训,操作系统,功能,进程,系统互动,主要指Python和操作系统(operatesystem)、文件系统(fipython之使用inspect模块
python之使用inspect模块,异常,信息,名字,代码,培训,资料,价值,方法,参数,模块,inspect模块提供了一系列函数用于帮助使用自省。下面仅列出较Python标准库的学习准备
Python标准库的学习准备,标准,概念,网络,基础,系统,工作,培训,数据,基础知识,信息,Python标准库是Python强大的动力所在,我们已经在前文中有所Python重命名和删除文件
Python重命名和删除文件,培训,文件,方法,文件名,语法,模块,例子,参数,以上,两个,python的os模块提供了帮你执行文件处理操作的方法,比如重命名python操作系统接口模块:OS
python操作系统接口模块:OS,管理,工作,工具,系统,服务,培训,模块,文件,目录,函数,OS模块提供了很多与操作系统进行交互的函数,比如常见的使用函