Python导入模块包原理及相关注意事项

包的使用

1.首次导入模块发生的事情3件事情

先产生一个执行文件的名称空间:

1.创建模块文件的名称空间

2.执行模块文件中的代码 将产生的名字放入模块的名称空间中

3.在执行文件中拿到一个指向模块名称空间的名字

2.什么是包?

  • ​ 它是一系列模块文件的结合体,表示形式就是一个文件夹
  • ​ 该文件夹内部通常会有一个__init__.py文件
  • ​ 包的本质还是一个模块

3.首次导入包发生的事情

首次导入包:

先产生一个执行文件的名称空间

1.创建包下面的__init__.py文件的名称空间

2.执行包下面的__init__.py文件中的代码 将产生的名字放入包下面的__init__.py文件名称空间中

3.在执行文件中拿到一个指向包下面的__init__.py文件名称空间的名字

4.为什么要有包?

模块的第一个版本只有10个功能,但是未来在扩展版本的时候,模块名和用法应该最好不要去修改,但是这只是对使用者友好,而由于版本扩展,文件越来越大,模块设计者对模块的管理、维护会越来越复杂,因此我们可以使用包来扩展模块的功能。

5.python2和Python3中导入包注意事项

  • python2如果要导入包 包下面必须要有__init__.py文件
  • python3如果要导入包 包下面没有__init__.py文件也不会报错

当你在删程序不必要的文件的时候 千万不要随意删除__init__.py文件

包 == 模块, 包拿来导入用的

包是含有__init__.py的文件夹; 导包就是导入__init__

'''
包一定是被当作模块文件导入,模块文件 m1.py/m2.py 的搜索路径以执行文件 包的介绍.py 路径为准,在执行文件所在的文件夹只能看到包aaa,而找不到包aaa内的m1.py文件。
'''
#包
##aaa
###__init__.py
from m1 import f1
###m1.py
def f1():
  print('来自m1中的f1')
##包的介绍.py(执行文件)
import aaa
print(aaa.f1)
'''
打印结果
ModuleNotFoundError: No module named 'm1'
'''
#正确的导包的方式,绝对导入(一层包)
#包
##包的介绍.py(执行文件)
import aaa  #包aaa
print(aaa.f1)
print(aaa.f2)
###__init__.py # 包aaa内文件
from aaa.m1 import f1 # 不符合包的原则
from aaa.m1 import f2 # 不符合包的原则
###m1.py # 包aaa内文件
def f1():
  print('来自m1中的f1')

def f2():
  print('来自m1中的f2')
'''
<function f1 at 0x000000000BC94F28>
<function f2 at 0x000000000BCA7048>
'''
#正确的导包的方式,绝对导入(二层包)
#包
##包的介绍.py(执行文件)
import aaa #包aaa
print(aaa.f5)
print(aaa.f5())
###__init__.py # 包aaa内文件
from aaa.bbb.m3 import f5 # 不符合包的原则
###m1.py # 包aaa内文件
def f1():
  print('来自m1中的f1')
def f2():
  print('来自m1中的f2')
###包bbb
####__init__.py #包bbb内的文件
	pass
####m3.py # #包bbb内的文件
def f5():
  print('来自m3中的f5')
def f6():
  print('来自m3中的f6')
'''
<function f5 at 0x0000000009FF3F28>
来自m3中的f5
'''
或者直接可以在执行文件内还是以绝对导入的方式导入f5也是一样的。
from aaa.bbb.m3 import f5
print(f5)
print(f5())

5.相对导入 和绝对导入

绝对导入:必须以执行文件的搜索路径为基准,比如上面的from aaa.bbb.m3 import f5

​ 相对导入:

  • ​ .表示当前文件夹下的文件
  • ​ ..表示父亲文件夹下的文件
  • ​ ...表示爷爷文件夹下的文件

5.1相对导入引入事例

5.2相对导入(练习)

#正确的导包的方式,相对导入(二层包)
#包
##包的介绍.py(执行文件)
import aaa #包aaa
print(aaa.f5)
print(aaa.f5())
###__init__.py # 包aaa内文件
from aaa.bbb import f5
###m1.py # 包aaa内文件
def f1():
  print('来自m1中的f1')
def f2():
  print('来自m1中的f2')
###包bbb
####__init__.py #包bbb内的文件
	from .m3 import f5
####m3.py # #包bbb内的文件
def f5():
  print('来自m3中的f5')
def f6():
  print('来自m3中的f6')
'''
<function f5 at 0x000000000A008048>
来自m3

6.导包注意事项

  • 包内所有的文件都是被导入使用的,而不是被直接运行的
  • 包内部模块之间的导入可以使用绝对导入(以包的根目录为基准)与相对导入(以当前被导入的模块所在的目录为基准),推荐使用相对导入
  • 当文件是执行文件时,无法在该文件内用相对导入的语法,只有在文件被当作模块导入时,该文件内才能使用相对导入的语法
  • 凡是在导入时带点的,点的左边都必须是一个包,import aaa.bbb.m3.f5错误

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python模块和包的应用BASE_PATH使用解析

    这篇文章主要介绍了python模块和包的应用BASE_PATH使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python中的模块(module)是管理python应用程序的工具,而包(package)是管理模块的工具.在管理和使用包的时候需要注意,调用注意设置文件的相对路径,以保证程序的可移植性. 下面的小程序主要应用os和sys模块中的一些目录管理方法实现了BASE_PATH的设置. import os import sys BAS

  • Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解

    wheel文件 Wheel和Egg都是python的打包格式,目的是支持不需要编译或制作的安装过程,实际上也是一种压缩文件,将.whl的后缀改为.zip即可可看到压缩包里面的内容.按照官网说法,wheels是发行版Python的新标准并且要取代.egg. Egg格式是由setuptools在2004年引入,而Wheel格式是由PEP427在2012年定义. Wheel现在被认为是Python的二进制包的标准格式. 以下是Wheel和Egg的主要的不同点: Wheel有一个官方的PEP427来定义

  • python实现引用其他路径包里面的模块

    问题:一个文件夹c下的模块test要引用另一个包b里面模块test2的函数add,如下图 解决办法: 经过前辈oyljerry等的指点迷津,要在sys.path添加包a的路径,永久添加则在/usr/lib/python2.7/dist-packages添加一个pth文件.如临时添加测试,可以使用列表函数append把该路径放入列表尾部即可. 为什么不是包b的路径呢?因为虽然a和b都是一个包,如添加包b的路径到搜索路径列表,则python搜索时先遇到a把它当作包处理,就不往里面寻找,导致包b没找到

  • Python安装依赖(包)模块方法详解

    Python模块,简单说就是一个.py文件,其中可以包含我们需要的任意Python代码.迄今为止,我们所编写的所有程序都包含在单独的.py文件中,因此,它们既是程序,同时也是模块.关键的区别在于,程序的设计目标是运行,而模块的设计目标是由其他程序导入并使用. 不是所有程序都有相关联的.py文件-比如说,sys模块就内置于Python中,还有些模块是使用其他语言(最常见的是C语言)实现的.不过,Python的大多数库文件都是使用Python实现的,因此,比如说,我们使用了语句import coll

  • 安装完Python包然后找不到模块的解决步骤

    首先呢我去安装了一个那个pytorch,然后导入一下发现: 连numpy都找不到,于是我表示很生气 重新安装,它说安装过了,地址是balabala: 说明是找不到的问题,于是乎我去配了一下环境变量 在环境变量最后加入了一行: export PYTHONPATH=/usr/local/lib/python3.6/dist-packages:$PYTHONPATH 然后就导入成功了 以上这篇安装完Python包然后找不到模块的解决步骤就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多

  • 详解python中的模块及包导入

    python中的导入关键字:import 以及from  import 1.import import一般用于导入包以及模块. 不过有个小问题: (1)当导入的是模块的时候是可以直接可以使用模块内的函数以及变量的, 比如说:包名为:com.test,在这个包底下有个模块为a.py,那么当其他包中的模块想要引入a模块的时候写法为 import com.test.a 在b.py中调用的方式为:com.test.a.(a中的函数或者变量),而不能直接写为a.(a中的函数名或者变量) (2)当导入的是包

  • Python模块/包/库安装的六种方法及区别

    方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 方法2: 多文件模块,文件内有setup.py文件 在官网或者GitHub上下载模块包(压缩文件zip或tar.gz),解压缩之后,文件夹下会有setup.py文件,从命令行窗口进入该文件夹,然后输入命令: python setup.py install 方法3:easy_install 方式 先下载 ez_setup.py,运行 python ez_setup 进行easy_install工具的安装,之后就可以使用easy

  • Python导入模块包原理及相关注意事项

    包的使用 1.首次导入模块发生的事情3件事情 先产生一个执行文件的名称空间: 1.创建模块文件的名称空间 2.执行模块文件中的代码 将产生的名字放入模块的名称空间中 3.在执行文件中拿到一个指向模块名称空间的名字 2.什么是包? ​ 它是一系列模块文件的结合体,表示形式就是一个文件夹 ​ 该文件夹内部通常会有一个__init__.py文件 ​ 包的本质还是一个模块 3.首次导入包发生的事情 首次导入包: 先产生一个执行文件的名称空间 1.创建包下面的__init__.py文件的名称空间 2.执行

  • Python导入模块的3种方式小结

    目录 导入模块方式一:临时添加模块完整路径 导入模块方式二:将模块保存到指定位置 导入模块方式三:设置环境变量 很多初学者经常遇到这样的问题,即自定义 Python 模板后,在其它文件中用 import(或 from...import) 语句引入该文件时,Python 解释器同时如下错误: ModuleNotFoundError: No module named '模块名' 意思是 Python 找不到这个模块名,这是什么原因导致的呢?要想解决这个问题,读者要先搞清楚 Python 解释器查找模

  • 关于python导入模块import与常见的模块详解

    0.什么是python模块?干什么的用的? Java中如果使用abs()函数,则需要需要导入Math包,同样python也是封装的,因为python提供的函数太多,所以根据函数的功能将其封装在不同的module模块中.就这样的话,pthon提供的module还是海量的,所以除非使用某个模块里的某个函数时才会将其导入程序中.所以你使用某个函数前,要先知道他在哪个module里,然后将这个模块导入当前程序,然后才能调用这个模块里的函数. 当然 python的模块分为用户自定义的和系统提供的.Pyth

  • python导入模块交叉引用的方法

    实际项目中遇到python模块相互引用问题,查资料,终于算是弄明白了. 首先交叉引用或是相互引用,实际上就是导入循环,关于导入循环的详细说明,可见我摘自<python核心编程>第二版的摘抄:Python导入循环方法. 附录给了一种解决交叉引用的方法,试了,不行,但关于交叉引用问题本身说明的很清楚,如果不清楚什么是交叉引用,可看附录一. 循环引用在python圈关注的并不多,语言上没有提供防止循环依赖的机制. 总的来说,应该在总体结构上避免模块之间互相依赖,即:A依赖B,B就不要依赖A,这也是代

  • 浅谈python 导入模块和解决文件句柄找不到问题

    如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作为输入执行.这就是传说中的脚本 Python 提供了一个方法可以从文件中获取定义,在脚本或者解释器的一个交互式实例中使用.这样的文件被称为模块. 导入模块: python导入模块默认是从sys.path的路径中查找.所以应该把这个模块放在sys.path的值对应的文件夹里.否则就找不到要导入的模块.如果在cmd中或者ID

  • Python导入模块时遇到的错误分析

    当遇到无法导入某个python模块时,可能会是没有安装某个模块,也有可能是某模块在加载过程中失败,也有可能是陷入了循环导入的问题.本文详细解释了这个问题. 1. 模块未安装或者路径不对 ImportError: No mudule named myModule 有两种可能,一是该模块没有安装,一般可以用 pip install %module_name% 来解决.注意有时候模块安装包名并不等于要导入的模块名.这种情况下可以通过pip search | list命令来尝试找到正确的包. 另一种情况

  • Python threading模块condition原理及运行流程详解

    Condition的处理流程如下: 首先acquire一个条件变量,然后判断一些条件. 如果条件不满足则wait: 如果条件满足,进行一些处理改变条件后,通过notify方法通知其他线程,其他处于wait状态的线程接到通知后会重新判断条件. 不断的重复这一过程,从而解决复杂的同步问题. Condition的基本原理如下: 可以认为Condition对象维护了一个锁(Lock/RLock)和一个waiting池.线程通过acquire获得Condition对象,当调用wait方法时,线程会释放Co

  • Python中导入模块的几种方式总结

    目录 Part.I 预备知识 Chap.I 几个概念的区分 Chap.II 模块中的 all 变量 Part.II 导入模块的几种方法 Chap.I 方法 Chap.II 实例 补充:python导入自己的模块 总结 Part.I 预备知识 Chap.I 几个概念的区分 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和 Python 语句. Python 包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成

  • python如何导入依赖包

    第一步:打开pycharm:File-->Settings 第二步:Project:(你的项目名)-->Project InterPreter-->点击右边的加号 第三步:在窗口中搜索要下载的依赖-->选中并点击左下角的install package即可导入依赖包 内容扩展: python 导入导出依赖包命令 程序中必须包含一个 requirements.txt 文件,用于记录所有依赖包及其精确的版本号.如果 要在另一台电脑上重新生成虚拟环境,这个文件的重要性就体现出来了,例如部署

  • 解决PyCharm同目录下导入模块会报错的问题

    在PyCharm2017中同目录下import其他模块,会出现No model named ...的报错,但实际可以运行 这是因为PyCharm不会将当前文件目录自动加入source_path. 在当前目录右键make_directory as-->Sources Root python导入模块 同一目录下在a.py中导入b.py import b 或者 from b import 方法/函数 不同目录下在a.py中导入b.py import sys sys.path.append('b模块的绝

随机推荐