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配置模块的搜索路径和包的导入相关推荐

  1. 模块的四种形式 模块的调用 循环导入问题 模块的搜索路径 py文件的两种用途 编译python文件 包...

    目录 模块的四种形式 什么是模块 模块的四种形式 自定义模块 第三方模块 内置模块 包 使用模块的好处 模块的调用 循环导入问题 模块的搜索路径 py文件的两种用途 编译python文件 包 什么是包 ...

  2. Python模块的搜索路径

    一.模块的搜索路径的顺序 模块其实就是一个文件,如果要执行文件,首先就需要找到模块的路径(某个文件夹).如果模块的文件路径和执行文件不在同一个文件目录下,我们就需要指定模块的路径. 模块的搜索路径指的 ...

  3. linux vim配置头文件搜索路径

    linux vim配置头文件搜索路径 根目录下 修改 etc/profile 文件结尾处加 set path=.,/usr/include,,/usr/include/c++/** //**搜索子目录 ...

  4. python入门——P51模块:模块内测试、搜索路径和包

    __name_='__main_' 只有直接把模块当做主程序运行时,才会运行代码,当模块是被导入到其他程序则不会运行 在主程序使用__name_则会得到"__main_",在别的程 ...

  5. python如何创建工程预设_如何在sublime3项目设置中设置python模块的搜索路径?ImportError: No module named *的解决办法...

    问题:之前使用pycharm,用的挺溜,但是电脑配置实在不争气,pycharm启动久了,耗去大量内存,导致运行起来越来越慢,于是转向使用sublime text. 把项目从pycharm切换到subl ...

  6. sublime text3 python找不到文件路径_如何在sublime3项目设置中设置python模块的搜索路径?ImportError: No module named *的解决办法...

    问题:之前使用pycharm,用的挺溜,但是电脑配置实在不争气,pycharm启动久了,耗去大量内存,导致运行起来越来越慢,于是转向使用sublime text. 把项目从pycharm切换到subl ...

  7. python包路径有几个_python的搜索路径与包(package)

    python的搜索路径其实是一个列表,它是指导入模块时,python会自动去找搜索这个列表当中的路径,如果路径中存在要导入的模块文件则导入成功,否则导入失败: >>> imports ...

  8. 详解Python模块化——模块(Modules)和包(Packages)

    文章目录 引言 Python Modules模块 导入模块 ①导入整个模块 ②导入模块中的特定函数 ③导入模块中的所有函数 给导入的模块一个别名 单独运行模块 加速模块加载 Python Packag ...

  9. Python批量添加库搜索路径

    被win10 给坑了,换回Win7. 重装系统后,继续使用Python,Eclipse不用重装,pydev不用重装,只需重装Python2.7.6 X64 for win即可.然后,默认已安装的Pyt ...

最新文章

  1. 朋友们请珍重自己的身体
  2. mysql数据库热备份
  3. ?? 运算符 和三元运算符
  4. table 隔列换色
  5. ACM入门之【线段树】
  6. linux部署的java应用,浏览器访问时,报域名解析错误
  7. c语言 vscode代码自动补全_借助C/C++ Extension实现VSCode C++代码补全
  8. visual studio 2017搭建linux c++开发环境
  9. 【C、C++】ctype.h、cctype中的isnumber()函数和isdigit()函数的区别
  10. MySQL -- 行转列 -- GROUP_CONCAT -- MAX(CASE WHEN THEN)
  11. matlab 没有vartestn,2013五一赛数学建模论文.docx
  12. R2CNN 算法笔记
  13. sql语句多条件查询语句拼接
  14. hdu 畅通工程再续
  15. 【详细图解】七彩虹智能主板的开机键连接线怎么插 | 七彩虹主板的前置音频接线法怎么插 | 七彩虹2.0主板 F_PANEL怎样插
  16. stc单片机c语言程序头文件(stc12c5a60s2.h,STC12C5A60S2单片机头文件
  17. 《富爸爸穷爸爸》读书笔记 -- 第一章
  18. 微软android桌面壁纸,微软桌面(com.microsoft.launcher) - 6.210402.0.960830 - 应用 - 酷安
  19. 【读书笔记 1】《读大江大河 有感》
  20. 音视频从入门到精通——FFmpeg之swr_convert音频重采样函数分析

热门文章

  1. 大数据Java基础之常用类
  2. 程序员创业的瓶颈及破解方法
  3. 转载:本地项目上传至git码云步骤(超详细,附图文)
  4. 为你的GitHub个人资料构建出色的自述文件
  5. 网游如何防外挂篡改数据——客户端内存加密
  6. 每日一题(01.10)
  7. 微信怎么恢复删除的聊天记录?原来这么简单轻松!
  8. Python xlwings操作Excel(摸鱼划水必备技能)——(1)各元素属性及方法
  9. 人工智能65年简史:从麦卡锡到Hinton,人类追求的AI究竟是什么?
  10. TabLayout使用