终于把这份 Python import 指南整理好了,速看!

简介: 终于把这份 Python import 指南整理好了,速看!

网络异常,图片无法展示
|


前言



最近发现很多同学都在问Python引入和调用的问题,比如报错无法引入模块、或者找不到某个模块。


ImportError: cannot import name 'Select'
ModuleNotFoundError: No module named 'test'
复制代码


今天我们就单独聊一下这个问题,希望能给同学们一些解决思路。


1. Python标准库与第三方库



首先我们来看一个基础问题,区分下Python的标准库与第三方库。如下图所示:


网络异常,图片无法展示
|


1)Python标准库


Python的标准库,实际上就是一些内置模块,只要我们安装了Python,就自带这些内置模块,比如 randomos 等等。


使用这些库也非常简单,我们无需额外的安装,就可以直接 import 进来使用:


import random
print(random.random())
复制代码


2)Python第三方库


那Python的第三方库呢,就是一些非官方组织或者个人,写出来的具有某些特定功能的框架,比如我们的Airtest,就是用来做UI自动化测试的一个Python第三方库;还有图中示例的Django,是用来进行web开发的一个Python第三方库。


使用这些第三方库呢,除了要有一个Python环境之外,还要在这个Python环境里面,安装上我们要用到的第三方库,比如使用Airtest和Poco:


pip install airtest
pip install pocoui
复制代码


成功把这些第三方库安装到我们的Python环境之后,我们才能够从这些库里面 import 我们想要的功能:


from airtest.core.api import *
auto_setup(__file__)
snapshot(msg="请填写测试点.")
复制代码


3)出现 no module named 'airtest' 的解决办法


如果同学们理解了Python标准库和第三方库的区别后,再遇到类似 no module named 'airtest' 或者no moudle named 'airtest-selenium' 等问题时,就会知道是因为当前Python环境里没有安装好这些第三方库的原因了。


解决办法也非常简单,找到当前使用的Python环境,然后在该环境下安装好我们所需的第三方库即可。(特别注意如本地有多个Python环境时,需要在同学们使用的那个Python环境里安装所需的第三方库)


2. Python导入模块的几种方式



1)import os


这种导入方式常用于导入Python的标准库:


# 打印当前的工作目录
import os
print(os.getcwd())
复制代码


2)from os import chmod


这种导入方式常用于包文件的导入,当然也有同学习惯这样使用:


from airtest.report.report import *
复制代码


这样导入尽管不会报错,但是可读性相对较差。


3)import logging as log


这种方式给导入的模块起了别名,后续我们再用到该模块的方法时,可以用别名来调用:


import logging as log
log.info('this is a info message')
复制代码


3. 如何知道该从哪个模块里面引入你所需的方法



我们就以Airtest框架的使用来说,我们在IDE上新建了1个 .air 脚本,默认就会带上这句引入的脚本:


from airtest.core.api import *
复制代码


这句话的意思是引入了 airtest.core.api 这个模块里面的所有内容,也就是Airtest的核心API。


像我们常用到的 auto_setupstart_apptouchswipe 等都是这个模块下面的。


1)出现 name 'xxx' is not defined 的解决办法


但是airtest还有很多其它模块,比如报告模块。在教程文档中,我们知道了可以用 simple_report 来生成Airtest报告,但实际编写脚本时,就可能出现如下问题:


from airtest.core.api import *
auto_setup(__file__,logdir=True)
snapshot(msg="请填写测试点.")
simple_report(__file__,logpath=True)
-----
Traceback (most recent call last):
  File "airtest\cli\runner.py", line 73, in runTest
  File "site-packages\six.py", line 703, in reraise
  File "airtest\cli\runner.py", line 70, in runTest
  File "D:\test\taikang_test.air\taikang_test.py", line 11, in <module>
    simple_report(__file__,logpath=True)
NameError: name 'simple_report' is not defined
-----
复制代码


这是因为 simple_report 不在 airtest.core.api 这个模块里面,我们需要额外引入 simple_report 所在的模块。


那么问题来了,怎么知道 simple_report 在哪个模块下面呢?最简单的办法,打开Airtest的API文档,然后搜一下 simple_report 即可:


网络异常,图片无法展示
|


可以看到 simple_report 所在的模块是 airtest.report.report ,我们只需要在脚本里添加该模块的引入即可:


from airtest.report.report import simple_report
simple_report(__file__,logpath=True)
复制代码


再举个例子,在模拟滑动的案例中,我们看到可以使用如下的方法来模拟长按并拖动的操作:


# 长按删除应用
longtouch_event = [
    DownEvent([908, 892]),# 待删除应用的坐标
    SleepEvent(2),
    MoveEvent([165,285]),# 删除应用的垃圾桶坐标
    UpEvent(0)]
device().touch_proxy.perform(longtouch_event)
复制代码


我们依然可以通过上述的查API文档的方式,来知道需要引入的模块:


网络异常,图片无法展示
|


这里我们附上Airtest和Poco的API文档地址:



4. 引入其它的 .air 脚本的 using() 接口



那么聊完库的使用和模块引入的方法之后,我们再来看下关于引入的另一个问题,如何引入其它的 .air 脚本。


Airtest提供了 using 接口,能够将需要引用的脚本加入 sys.path 里,其中包含的图片文件也会被加入 Template 的搜索路径中。


举个例子,我们有俩个同级的 .air 脚本,要在1个 .air 脚本引入另外一个 .air 脚本,可以这么实现:


# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
auto_setup(__file__)
using("common.air")
from common import common_function
common_function()
复制代码


但如果我们脱离AirtestIDE来运行这个脚本,比如在pycharm中打开这个脚本来运行,有可能会出现如下报错:


Traceback (most recent call last):
  File "D:/test/taikang_test.air/taikang_test.py", line 13, in <module>
    from common import common_function
ModuleNotFoundError: No module named 'common'
复制代码


此时,最简单粗暴的方式是将 using 里面的相对路径改成绝对路径:


using(r"D:/test/common.air")
from common import common_function
common_function()
复制代码


如果不想改动 using 的脚本,我们还可以额外添加1个待引入脚本的 pathsys.path 里:


import sys
sys.path.append("D:/test/common.air")
using(r"common.air")
from common import common_function
common_function()
复制代码


小结



那么今天的教程我们主要讲了以下内容:


  • Python标准库与第三方库的区别以及引入办法
  • Python的几种 import 方式
  • 在API文档查询使用方法所在的模块
  • 引入其它 .air 脚本的 using 接口
相关文章
|
API Python
python 详细理解 import ---- openstack自动import class 到 特定命名空间
python 详细理解 import ---- openstack自动import class 到 特定命名空间
98 0
|
7月前
|
数据可视化 数据挖掘 开发者
import有什么用,python中怎么使用import
import有什么用,python中怎么使用import
98 1
|
Python
89 python高级 - import导入模块
89 python高级 - import导入模块
50 0
|
5月前
|
数据采集 机器学习/深度学习 Python
【Python】已完美解决:ImportError: cannot import name ‘Imputer‘ from ‘sklearn.preprocessing
【Python】已完美解决:ImportError: cannot import name ‘Imputer‘ from ‘sklearn.preprocessing
391 3
|
4月前
|
算法 TensorFlow 算法框架/工具
写Python时不用import,你会遭遇什么
写Python时不用import,你会遭遇什么
|
6月前
|
XML 数据格式 Python
Python的`import`用于加载模块,基础形式是`import module`,全量导入
【6月更文挑战第23天】Python的`import`用于加载模块,基础形式是`import module`,全量导入;`from module import name`选择性导入部分,减少命名空间污染;`from module import *`导入所有(不推荐),易引发冲突。别名导入如`from math import sqrt as square_root`可避免冲突。包导入用`.`,如`import xml.etree.ElementTree as ET`。
71 8
|
6月前
|
XML 数据格式 Python
在Python中,导入其他模块是通过使用import语句完成的
在Python中导入模块涉及`import`语句的不同用法:1) `import math`导入整个标准库;2) `from math import sqrt`导入单个函数;3) `import numpy as np`使用别名;4) `from random import *`导入所有(不推荐);5) `import xml.etree.ElementTree as ET`导入子模块;6) 使用`importlib.import_module()`延迟导入;7) `from .module import func`导入相对路径模块,需管理`sys.path`。
97 6
|
6月前
|
XML 数据格式 Python
Python模块导入包括:`import math`导入标准库
【6月更文挑战第23天】Python模块导入包括:`import math`导入标准库,`from math import sqrt`导入单个函数,`import numpy as np`给模块取别名,`from random import *`导入所有(不推荐),`import xml.etree.ElementTree as ET`导入子模块,`import_module(&#39;pandas&#39;)`按需导入,和使用相对路径如`from .module import func`处理项目结构。记得调整`sys.path`以包含自定义模块路径。
105 4
|
5月前
|
Python
【Python】已解决:(from docx import Document导包报错)ModuleNotFoundError: No module named ‘exceptions’
【Python】已解决:(from docx import Document导包报错)ModuleNotFoundError: No module named ‘exceptions’
360 0
|
5月前
|
XML JavaScript 数据格式
【Python】已解决:(Python xml库 import xml.dom.minidom导包报错)‘No module named dom’
【Python】已解决:(Python xml库 import xml.dom.minidom导包报错)‘No module named dom’
115 0