終於把這份 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 接口

如還有其他引入相關的問題,歡迎到我們的官方交流Q群(654700783)進行反饋。


Airtest官網https://airtest.netease.com/
Airtest教程官網https://airtest.doc.io.netease.com/
搭建企業私有雲服務https://airlab.163.com/b2b

官方答疑 Q 群:654700783

呀,這么認真都看到這里啦,幫忙點個推薦支持一下唄,灰常感謝~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM