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\utilities
D:\pycode\package1
三、sys.path
我们可以使用sys.path来查看当前机器上的实际模块搜索路径配置。sys.path返回一个list
import sys
sys.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 sys
sys.path.append('..')
'..'
的含义是搜索路径返回上一层级,那么其实对于在dir1中的文件来说,默认的搜索路径是在dir1文件夹内,那么使用了这一语句之后,搜索路径是从dir0开始,那么我们直接再进行导入就可以了。
在file3.py文件中
import sys
sys.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 sys
sys.path.append('..')
import dir1.file3
或者
import sys
sys.path.append('..')
from dir1 import file3
其实这样我们可以导入任意位置的模块,关键的一点是要把该模块的位置加入python的搜索路径sys.path,我们可以使用绝对路径来做到这一点。
比如dir0在内存中的存放位置为C:\buffer\study_data\dir0
在file5.py文件中
import sys
sys.path.append('C:\buffer\study_data\dir0')
from dir1 import file3
六、Reference
https://zhuanlan.zhihu.com/p/64893308
https://www.cnblogs.com/f-ck-need-u/p/9961372.html
python配置模块的搜索路径和包的导入相关推荐
- 模块的四种形式 模块的调用 循环导入问题 模块的搜索路径 py文件的两种用途 编译python文件 包...
目录 模块的四种形式 什么是模块 模块的四种形式 自定义模块 第三方模块 内置模块 包 使用模块的好处 模块的调用 循环导入问题 模块的搜索路径 py文件的两种用途 编译python文件 包 什么是包 ...
- Python模块的搜索路径
一.模块的搜索路径的顺序 模块其实就是一个文件,如果要执行文件,首先就需要找到模块的路径(某个文件夹).如果模块的文件路径和执行文件不在同一个文件目录下,我们就需要指定模块的路径. 模块的搜索路径指的 ...
- linux vim配置头文件搜索路径
linux vim配置头文件搜索路径 根目录下 修改 etc/profile 文件结尾处加 set path=.,/usr/include,,/usr/include/c++/** //**搜索子目录 ...
- python入门——P51模块:模块内测试、搜索路径和包
__name_='__main_' 只有直接把模块当做主程序运行时,才会运行代码,当模块是被导入到其他程序则不会运行 在主程序使用__name_则会得到"__main_",在别的程 ...
- python如何创建工程预设_如何在sublime3项目设置中设置python模块的搜索路径?ImportError: No module named *的解决办法...
问题:之前使用pycharm,用的挺溜,但是电脑配置实在不争气,pycharm启动久了,耗去大量内存,导致运行起来越来越慢,于是转向使用sublime text. 把项目从pycharm切换到subl ...
- sublime text3 python找不到文件路径_如何在sublime3项目设置中设置python模块的搜索路径?ImportError: No module named *的解决办法...
问题:之前使用pycharm,用的挺溜,但是电脑配置实在不争气,pycharm启动久了,耗去大量内存,导致运行起来越来越慢,于是转向使用sublime text. 把项目从pycharm切换到subl ...
- python包路径有几个_python的搜索路径与包(package)
python的搜索路径其实是一个列表,它是指导入模块时,python会自动去找搜索这个列表当中的路径,如果路径中存在要导入的模块文件则导入成功,否则导入失败: >>> imports ...
- 详解Python模块化——模块(Modules)和包(Packages)
文章目录 引言 Python Modules模块 导入模块 ①导入整个模块 ②导入模块中的特定函数 ③导入模块中的所有函数 给导入的模块一个别名 单独运行模块 加速模块加载 Python Packag ...
- Python批量添加库搜索路径
被win10 给坑了,换回Win7. 重装系统后,继续使用Python,Eclipse不用重装,pydev不用重装,只需重装Python2.7.6 X64 for win即可.然后,默认已安装的Pyt ...
最新文章
- 朋友们请珍重自己的身体
- mysql数据库热备份
- ?? 运算符 和三元运算符
- table 隔列换色
- ACM入门之【线段树】
- linux部署的java应用,浏览器访问时,报域名解析错误
- c语言 vscode代码自动补全_借助C/C++ Extension实现VSCode C++代码补全
- visual studio 2017搭建linux c++开发环境
- 【C、C++】ctype.h、cctype中的isnumber()函数和isdigit()函数的区别
- MySQL -- 行转列 -- GROUP_CONCAT -- MAX(CASE WHEN THEN)
- matlab 没有vartestn,2013五一赛数学建模论文.docx
- R2CNN 算法笔记
- sql语句多条件查询语句拼接
- hdu 畅通工程再续
- 【详细图解】七彩虹智能主板的开机键连接线怎么插 | 七彩虹主板的前置音频接线法怎么插 | 七彩虹2.0主板 F_PANEL怎样插
- stc单片机c语言程序头文件(stc12c5a60s2.h,STC12C5A60S2单片机头文件
- 《富爸爸穷爸爸》读书笔记 -- 第一章
- 微软android桌面壁纸,微软桌面(com.microsoft.launcher) - 6.210402.0.960830 - 应用 - 酷安
- 【读书笔记 1】《读大江大河 有感》
- 音视频从入门到精通——FFmpeg之swr_convert音频重采样函数分析