终于把这份 Python import 指南整理好了,速看!
Posted 编程界的小胖子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了终于把这份 Python import 指南整理好了,速看!相关的知识,希望对你有一定的参考价值。
最近发现很多同学都在问Python引入和调用的问题,比如报错无法引入模块、或者找不到某个模最近发现很多同学都在问Python 引入和调用的问题,比如报错无法引入模块、或者找不到某个模块。
ImportError: cannot import name 'Select'
ModuleNotFoundError: No module named 'test'
复制代码
今天我们就单独聊一下这个问题,希望能给同学们一些解决思路。
1. Python标准库与第三方库
首先我们来看一个基础问题,区分下Python的标准库与第三方库。如下图所示:
1)Python标准库
Python的标准库,实际上就是一些内置模块,只要我们安装了Python,就自带这些内置模块,比如 random 、 os 等等。
使用这些库也非常简单,我们无需额外的安装,就可以直接 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导入模块的几种方式
这种导入方式常用于导入Python的标准库:
# 打印当前的工作目录
import os
print(os.getcwd())
复制代码
这种导入方式常用于包文件的导入,当然也有同学习惯这样使用:
from airtest.report.report import *
复制代码
这样导入尽管不会报错,但是可读性相对较差。
这种方式给导入的模块起了别名,后续我们再用到该模块的方法时,可以用别名来调用:
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_setup
、 start_app
、 touch
、 swipe
等都是这个模块下面的。
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文档地址:
- Airtest API 文档:airtest.readthedocs.io/zh_CN/lates…
- Poco API 文档:poco.readthedocs.io/zh_CN/lates…
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个待引入脚本的 path
到 sys.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
接口
参考文献
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
需要相关资料的可以通过扫一扫
以上是关于终于把这份 Python import 指南整理好了,速看!的主要内容,如果未能解决你的问题,请参考以下文章
时隔三月!我把整理的Java面试指南在Github开源后,破百万 star了!