900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > python配置模块的搜索路径和包的导入

python配置模块的搜索路径和包的导入

时间:2023-06-23 15:56:59

相关推荐

python配置模块的搜索路径和包的导入

python配置模块的搜索路径和包的导入

Catalog

python配置模块的搜索路径和包的导入模块的搜索路径一、模块搜索路径的组成二、配置模块搜索路径的方法三、sys.path 包导入的例子一、简介二、导入同级模块三、导入下级模块四、导入上级模块五、导入其他任意位置模块六、Reference

模块的搜索路径

一、模块搜索路径的组成

模块的搜索路径由五部分组成:

程序的主目录PYTHONPATH目录标准库目录任何.pth文件中的内容第三方拓展应用的site-packages主目录

1、程序的主目录(自动的)

主目录的含义与你如何运行代码相关,当你运行一个程序的时候,主目录就是包含程序的顶层脚本文件的目录。当在交互式命令行工作下时,主目录就是你当前的工作目录。

程序的主目录总是优先被搜索的,如果一个程序完全位于单独的一个目录下,那么所有导入都会自动工作而无需进行搜索路径配置。

2、PYTHONPATH目录(可配置的)

在搜索完程序的主目录后,Python会从左至右地搜索PYTHONPATH环境变量(前提是需要导入的包已经被你手动设置到PYTHONPATH中了)设置中罗列出的所有变量。

简单地说,PYTHONPATH是设置包含Python程序文件的目录列表,这些目录可以是用户定义的或者特定平台的目录名。我们可以把我们想要被搜索的特定python文件都添加到PYTHONPATH中,以便实现路径配置,方便搜索。

3、标准库目录(自动的)

在搜索玩PYTHONPATH之后,Python会接着搜索安装在机器上的标准库模块目录,因为i标准库目录是一定会被搜索的,所以通常是不需要添加到PYTHONPATH之中或者包含到路径文件夹中的。

4、.pth文件目录(可配置的)

Python允许用户将需要添加的目录添加到模块的搜索路径中,也就是在.pth文本文件中一行一行地列出目录,需要将.pth文件放置在适当的目录中,一个.pth文件可以放置在Python安装的顶层目录,可以放在Python安装目录中的标准模块的安装sitepackages路径下。

5、第三方扩展应用的Lib\site-packages目录(自动的)

最后,Python会自动将标准库的site-packages子目录添加到模块搜索路径中。按照惯例,这里是大多数第三方扩展安装的地方,自动被在distutils工具管理。

二、配置模块搜索路径的方法

在上说的文件路径搜素中,能够配置的选项只有PYTHONPATH环境变量和路径文件。例如,在Windows平台上,创建PYTHONPATH环境变量,设置变量的值,两个目录使用分号隔开。

C:\pycode\utilities;D:\pycode\package1

创建一个.pth文件,内容如下

C:\pycode\utilitiesD:\pycode\package1

三、sys.path

我们可以使用sys.path来查看当前机器上的实际模块搜索路径配置。sys.path返回一个list

import syssys.path

我们还可以临时配置PYTHONPATH,使用sys.path.append或者sys.path.insert

sys.path.append('something')sys.path

sys.path.insert(-1, 'anything')sys.path

包导入的例子

一、简介

python的关键字import可以导入各种模块,包括自定义的模块

import的用法通常有两种:

1、不指定别名直接导入

import modulename

2、指定别名导入

import modulename as customname

3、使用from进行导入模块中的部分属性

from modeulename import func1, func2

现在我们考虑以下问题,假如我们的文件目录如下

--dir0| file1.py| file2.py| --dir1| file3.py| file4.py| --dir2| file5.py

二、导入同级模块

--dir0| file1.py| file2.py| --dir1| file3.py| file4.py| --dir2| file5.py

如果我们希望在file2.py文件中导入file1.py文件,那么直接使用import在同级中进行导入就可以了。

在file2.py文件中

import file1

同样的道理,如果我们希望在file3.py文件中导入file4.py文件,那么也是可以直接进行导入的。

在file3.py文件中

import file4

三、导入下级模块

--dir0| file1.py| file2.py| --dir1| file3.py| file4.py| --dir2| file5.py

如果我们希望在file1.py文件中导入,子目录dir1中的file3.py文件,那么需要在下级文件中创建一个空白的__init__.py文件,这个文件的作用是将该目录初始化为一个包,以便进行导入。

--dir0| file1.py| file2.py| --dir1| __init__.py| file3.py| file4.py| --dir2| file5.py

然后我们可以在file1.py中这样进行导入

import dir1.file3

或者

from dir1 import file3

四、导入上级模块

--dir0| file1.py| file2.py| --dir1| __init__.py| file3.py| file4.py| --dir2| file5.py

如果我们希望在file3.py文件中导入上级目录dir0中的file1.py文件,我们需要使用到sys库

import syssys.path.append('..')

'..'的含义是搜索路径返回上一层级,那么其实对于在dir1中的文件来说,默认的搜索路径是在dir1文件夹内,那么使用了这一语句之后,搜索路径是从dir0开始,那么我们直接再进行导入就可以了。

在file3.py文件中

import syssys.path.append('..')import file1

五、导入其他任意位置模块

--dir0| file1.py| file2.py| --dir1| __init__.py| file3.py| file4.py| --dir2| file5.py

如果我们希望在file5.py文件中导入file3.py文件,这算是同级导入,那么我们其实可以采用上一个方法。

在file5.py文件中

import syssys.path.append('..')import dir1.file3

或者

import syssys.path.append('..')from dir1 import file3

其实这样我们可以导入任意位置的模块,关键的一点是要把该模块的位置加入python的搜索路径sys.path,我们可以使用绝对路径来做到这一点。

比如dir0在内存中的存放位置为C:\buffer\study_data\dir0

在file5.py文件中

import syssys.path.append('C:\buffer\study_data\dir0')from dir1 import file3

六、Reference

/p/64893308

/f-ck-need-u/p/9961372.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。