一、模块与包的概念
1、python中的模块
python模块,是一个python文件,以.py结尾,包含了python对象的定义和python语句。
- 模块让你能够有逻辑的组织你的python代码段
- 把相关的代码分配到一个模块里能让你的代码更好用。
- 模块能定义函数,类和变量,模块里也能包含可执行的代码。
2、python中的包
包就是文件夹,但该文件夹下必须存在 init.py 文件,该文件的内容可以为空。
#直接导入模块
import time
#直接导入包
# import selenium.webdriver.common
#通过包的定位,导入common中的模块action_chains
# from selenium.webdriver.common import action_chains
#通过包的定位,找到模块action_chains,导入模块中的类
from selenium.webdriver.common.action_chains import ActionChains
二、导模块(相同模块)
- 同目录下可以直接导入,import 模块名或者包名
- from…import
from modname import name1[, name2[, ... nameN]]
三、不同目录下的到模块
import导入模块都做了啥:
- 找到模块文件
- 编译成字节码(需要时).pyc
- 执行导入模块的代码
注意:在之后导入相同的模块时候,会跳过这三个步骤,而只提取内存中已加载模块对象
如何找到模块(下面的几项内容组成了sys.path的列表):
- 程序的主目录(导模块所在文件夹目录)
- PTYHONPATH目录(python的安装目录)
- 标准连接库目录(Lib)
- 任何的.pth文件的内容
import sys
path = sys.path
print(path)
1、导入到模块的上一级目录
import sys
import os
path = sys.path
print(path)
pathCurrent = os.path.dirname(os.path.dirname(__file__))#代码实现获取当前文件所在目录的上一级目录
path.append(pathCurrent)
print(os.path)
import test2
2、与当前目录同级别目录
import sys
import os
path = sys.path
pathCurrent = os.path.dirname(os.path.dirname(__file__))+r"/xiaodi2"#(+后面跟要导入包的文件名字做拼接)
path.append(pathCurrent)
print(pathCurrent)
import test2
4、__name__的用法:
作用:“Make a script both importable and executable”
- 如果我们是直接执行某个.py文件的时候,该文件中: ”name == ‘main’“ 是True,
- 但是我们如果从另外一个.py文件通过import导入该文件的时候,这时__name__的值就是我们这个py文件的名字而不是__main__。
- 调试代码的时候,在”if name == ‘main’“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!
def aaa():
print("我是一个方法")
class Animal():
def bbb(self):
print("我是一条可执行语句")
if __name__=="__main__":
print(__name__)
print("当前文件中运行代码")
else:
print(__name__)
print("其他模块调用当前模块")