本文關(guān)鍵闡述了Python每日任務(wù)自動(dòng)化軟件nox的配備與API詳細(xì)信息,Nox對(duì)話(huà)是由被nox.session點(diǎn)綴的規(guī)范Python函數(shù)來(lái)配備的,實(shí)際詳細(xì)信息下面有關(guān)詳細(xì)介紹需要的朋友可以學(xué)習(xí)一下
序言:
NoxfileNox默認(rèn)設(shè)置在這個(gè)名叫noxfile.pe的文檔中搜索配備。在運(yùn)作nox時(shí),你能應(yīng)用--noxfile主要參數(shù)特定其他的文檔。
界定對(duì)話(huà)文件格式:session(func=None,python=None,py=None,reuse_venv=None,name=None,venv_backend=None),要被點(diǎn)綴的函數(shù)公式特定為對(duì)話(huà)。
Nox對(duì)話(huà)是由被nox.session點(diǎn)綴的規(guī)范Python函數(shù)來(lái)配備的。
比如:
import nox nox.session def tests(session): session.run('pytest')
會(huì)話(huà)描述你可以使用文檔字符串向會(huì)話(huà)中添加一個(gè)描述。第一行內(nèi)容會(huì)在列出會(huì)話(huà)時(shí)顯示。
例如:
import nox nox.session def tests(session): """Run the test suite.""" session.run('pytest')
nox--list命令將顯示出:
$nox--list Available sessions: *tests->Run the test suite. 你可以告訴nox使用自定義的名稱(chēng)運(yùn)行會(huì)話(huà): $nox--session"custom-name" Hello!
配置會(huì)話(huà)的virtualenv默認(rèn)情況下,Nox在為每個(gè)會(huì)話(huà)創(chuàng)建一個(gè)新的virtualenv時(shí),會(huì)使用Nox所用的同一個(gè)解釋器。如果你使用Python 3.6安裝了nox,則nox將默認(rèn)在所有會(huì)話(huà)中使用Python 3.6。
通過(guò)給nox.session指定python參數(shù)(或其別名py),你可以告訴nox使用不同的Python解釋器/版本:
nox.session(python='2.7') def tests(session): pass
當(dāng)你提供一個(gè)版本號(hào)時(shí),Nox會(huì)自動(dòng)添加python來(lái)確定可執(zhí)行文件的名稱(chēng)。但是,Nox也可以接受完整的可執(zhí)行名稱(chēng)。如果你想使用pypy來(lái)測(cè)試,例如:
nox.session(python=['2.7','3.6','pypy-6.0']) def tests(session): pass
當(dāng)準(zhǔn)備你的會(huì)話(huà)時(shí),Nox將為每個(gè)解釋器創(chuàng)建多帶帶的會(huì)話(huà)。你可以在運(yùn)行nox--list的時(shí)候看到這些會(huì)話(huà)。例如這個(gè)Noxfile:
nox.session(python=['2.7','3.5','3.6','3.7']) def tests(session): pass
將產(chǎn)生這些會(huì)話(huà):
*tests-2.7
*tests-3.5
*tests-3.6
*tests-3.7
注意,這個(gè)擴(kuò)展發(fā)生在參數(shù)化之前,所以你仍然可以對(duì)多個(gè)解釋器的會(huì)話(huà)進(jìn)行參數(shù)化。
如果你想完全禁止創(chuàng)建virtualenv,你可以設(shè)置python參數(shù)為False:
nox.session(python=False) def tests(session): pass
最后,你還可以指定每次都重用virtualenv,而不是重新創(chuàng)建:
nox.session( python=['2.7','3.6'], reuse_venv=True) def tests(session): pass
將參數(shù)傳入會(huì)話(huà)通常往測(cè)試會(huì)話(huà)中傳遞參數(shù)是很有用的。下面是一個(gè)簡(jiǎn)單示例,演示了如何使用參數(shù)對(duì)特定文件作測(cè)試:
nox.session def test(session): session.install('pytest') if session.posargs: test_files=session.posargs else: test_files=['test_a.py','test_b.py'] session.run('pytest',*test_files)
現(xiàn)在如果你運(yùn)行:
nox那么nox將運(yùn)行:
pytest test_a.py test_b.py但如果你運(yùn)行:
nox--test_c.py那么nox將運(yùn)行:
pytest test_c.py
參數(shù)化會(huì)話(huà)會(huì)話(huà)的參數(shù)可以用nox.parametrize()裝飾器來(lái)作參數(shù)化。
下面是一個(gè)典型的參數(shù)化安裝Django版本的例子:
nox.session nox.parametrize('django',['1.9','2.0']) def tests(session,django): session.install(f'django=={django}') session.run('pytest') 當(dāng)你運(yùn)行nox時(shí),它會(huì)創(chuàng)建兩個(gè)不同的會(huì)話(huà): $nox nox>Running session tests(django='1.9') nox>pip install django==1.9 ... nox>Running session tests(djano='2.0') nox>pip install django==2.0
nox.parametrize()的接口和用法故意跟pytest的參數(shù)化相類(lèi)似。
格式:parametrize(arg_names,arg_values_list,ids=None)
作用是參數(shù)化一個(gè)會(huì)話(huà)。
將arg_values_list列表賦給對(duì)應(yīng)的arg_names,為裝飾的會(huì)話(huà)函數(shù)添加新的調(diào)用。參數(shù)化在會(huì)話(huà)發(fā)現(xiàn)期間執(zhí)行,每次調(diào)用都作為nox的單個(gè)會(huì)話(huà)出現(xiàn)。
參數(shù):
arg_names(Sequence[str])——一系列參數(shù)名稱(chēng)
arg_values_list(Sequence[Union[Any,Tuple]])——參數(shù)值列表決定了使用不同參數(shù)值調(diào)用會(huì)話(huà)的頻率。如果只指定了一個(gè)參數(shù)名,那么這就是一個(gè)簡(jiǎn)單的值列表,例如[1,2,3]。如果指定了N個(gè)參數(shù)名,這必須是一個(gè)N元組的列表,其中每個(gè)元素為其各自的參數(shù)名指定一個(gè)值,例如[(1,'a'),(2,'b')]。
ids(Sequence[str])——可選項(xiàng),一系列測(cè)試id,被參數(shù)化的參數(shù)使用。
你也可以堆疊裝飾器,令其產(chǎn)生組合了參數(shù)的會(huì)話(huà),例如:
nox.session nox.parametrize('django',['1.9','2.0']) nox.parametrize('database',['postgres','mysql']) def tests(session,django,database): ...
運(yùn)行nox--list時(shí)會(huì)產(chǎn)生這些會(huì)話(huà):
*tests(psql,old)
*tests(mysql,old)
*tests(psql,new)
*tests(mysql,new)
會(huì)話(huà)對(duì)象Nox將使用Session類(lèi)的一個(gè)實(shí)例來(lái)調(diào)用你的會(huì)話(huà)函數(shù)。
class Session(runner):
會(huì)話(huà)對(duì)象被傳遞到用戶(hù)自定義的每個(gè)會(huì)話(huà)函數(shù)中。
這是在Nox會(huì)話(huà)中安裝軟件包和運(yùn)行命令的主要途徑。
bin:——virtualenv的bin目錄
cd(dir):——chdir()的一個(gè)別名
chdir(dir):——更改當(dāng)前的工作目錄
conda_install(
args,
*kwargs):
調(diào)用conda install來(lái)在會(huì)話(huà)環(huán)境中的安裝軟件包。
直接安裝軟件包:
session.conda_install('pandas') session.conda_install('numpy','scipy') session.conda_install('--channel=conda-forge','dask==2.1.0')
根據(jù)requirements.txt文件來(lái)安裝軟件包:
session.conda_install('--file','requirements.txt') session.conda_install('--file','requirements-dev.txt')
不破壞conda已安裝的依賴(lài)而安裝軟件包:
session.install('.','--no-deps') #Install in editable mode. session.install('-e','.','--no-deps')
剩下的關(guān)鍵字參數(shù)跟run()相同。
env:——一個(gè)環(huán)境變量的字典,傳給所有的命令。
error(
args,
*kwargs):——立即中止會(huì)話(huà)并隨意地記錄一個(gè)錯(cuò)誤。
install(
args,
*kwargs):——調(diào)用pip在會(huì)話(huà)的virtualenv里安裝包。
直接安裝包:
session.install('pytest') session.install('requests','mock') session.install('requests[security]==2.9.1') 根據(jù)requirements.txt文件來(lái)安裝軟件包: session.install('-r','requirements.txt') session.install('-r','requirements-dev.txt') 安裝當(dāng)前的包: session.install('.') #Install in editable mode. session.install('-e','.')
剩下的關(guān)鍵字參數(shù)跟run()相同。
interactive:——如果Nox在交互式會(huì)話(huà)中運(yùn)行,則返回True,否則返回False。
log(
args,
*kwargs):——在會(huì)話(huà)期間輸出一份日志。
notify(target):——將給定的會(huì)話(huà)放在隊(duì)列的末尾。
此方法是冪等的;對(duì)同一會(huì)話(huà)的多次通知無(wú)效。
參數(shù):target(Union[str,Callable])——需要通知的會(huì)話(huà)。這可以指定適當(dāng)?shù)淖址?與nox-s的使用相同)或使用函數(shù)對(duì)象。
posargs:——用于設(shè)置從命令行上傳給nox的額外參數(shù)。
python:——傳給nox.session的Python版本。
run(args,env=None,kwargs):——運(yùn)行一個(gè)命令。
命令必須安裝字符串列表指定,例如:
session.run('pytest','-k','fast','tests/')
session.run('flake8','--import-order-style=google')
你不能把所有東西都當(dāng)作一個(gè)字符串傳遞。例如,不可以這樣:
session.run('pytest-k fast tests/')
你可以用env為命令設(shè)置環(huán)境變量:
session.run(
'bash','-c','echo$SOME_ENV',
env={'SOME_ENV':'Hello'})
你還可以使用success_codes,告訴nox將非零退出碼視為成功。例如,如果你想將pytest的“tests discovered,but none selected”錯(cuò)誤視為成功:
session.run(
'pytest','-k','not slow',
success_codes=[0,5])
在Windows上,像del這樣的內(nèi)置命令不能直接調(diào)用,但是你可以使用cmd/c來(lái)調(diào)用它們:
session.run('cmd','/c','del','docs/modules.rst')
參數(shù):
env(dict or None)——用于向命令公開(kāi)的環(huán)境變量字典。默認(rèn)情況下,傳遞所有環(huán)境變量。
silent(bool)——靜默命令輸出,除非命令失敗。默認(rèn)為False。
success_codes(list,tuple,or None)——一系列被認(rèn)為是成功的返回碼。默認(rèn)情況下,只有0被認(rèn)為是成功的。
external(bool)——如果為False(默認(rèn)值),那么不在virtualenv路徑中的程序?qū)l(fā)出告警。如果為T(mén)rue,則不會(huì)發(fā)出告警。這些告警可以使用--error-on-external-run將其轉(zhuǎn)換為錯(cuò)誤。這對(duì)沒(méi)有virtualenv的會(huì)話(huà)沒(méi)有影響。
skip(
args,
*kwargs):——立即跳出會(huì)話(huà),并隨意記錄一個(gè)告警。
virtualenv:——運(yùn)行所有命令的virtualenv。
修改Noxfile中的Nox行為Nox有各種命令行參數(shù),可用于修改其行為。其中一些還可以在Noxfile中使用nox.options指定。例如,如果你想將Nox的virtualenvs存儲(chǔ)在不同的目錄中,而不需要每次都將它傳遞給nox:
import nox nox.options.envdir=".cache" nox.session def tests(session): ...
或者,如果你想提供一組默認(rèn)運(yùn)行的會(huì)話(huà):
import nox nox.options.sessions=["lint","tests-3.6"] ...
以下的選項(xiàng)可以在Noxfile中指定:
nox.options.envdir等同于指定–envdir.
nox.options.sessions等同于指定-s or–sessions.
nox.options.keywords等同于指定-k or–keywords.
nox.options.reuse_existing_virtualenvs等同于指定–reuse-existing-virtualenvs。通過(guò)在調(diào)用時(shí)指定--no-reuse-existing-virtualenvs,你可以強(qiáng)制取消它。
nox.options.stop_on_first_error等同于指定–stop-on-first-error.通過(guò)在調(diào)用時(shí)指定--no-stop-on-first-error,你可以強(qiáng)制取消它。
nox.options.error_on_missing_interpreters等同于指定–error-on-missing-interpreters。通過(guò)在調(diào)用時(shí)指定--no-error-on-missing-interpreters,你可以強(qiáng)制取消它。
nox.options.error_on_external_run等同于指定–error-on-external-run.通過(guò)在調(diào)用時(shí)指定--no-error-on-external-run,你可以強(qiáng)制取消它。
nox.options.report等同于指定–report。
在調(diào)用nox時(shí),命令行上指定的任何選項(xiàng)都優(yōu)先于Noxfile中指定的選項(xiàng)。如果在命令行上指定了--sessions或--keywords,那么在Noxfile中指定的兩個(gè)選項(xiàng)都將被忽略。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/128693.html
摘要:前言中所安裝的只支持,但很多插件如和均需要,那就來(lái)場(chǎng)生命貴在折騰吧自檢在中輸入以下命令,若出現(xiàn)則表示不支持,則表示支持表示不支持,則表示支持。重置符號(hào)鏈接然后輸入按回車(chē)。上圖中的值最高,因此若處于時(shí),應(yīng)該為。 前言 ?Ubuntu 16+中$ sudo apt install vim所安裝的vim只支持Python3,但很多插件如YCM和powerline均需要Python2,那就來(lái)場(chǎng)...
摘要:在本節(jié)中,我們將看到一些最流行和最常用的庫(kù),用于機(jī)器學(xué)習(xí)和深度學(xué)習(xí)是用于數(shù)據(jù)挖掘,分析和機(jī)器學(xué)習(xí)的最流行的庫(kù)。愿碼提示網(wǎng)址是一個(gè)基于的框架,用于使用多個(gè)或進(jìn)行有效的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000018961827?w=999&h=562); 來(lái)源 | 愿碼(ChainDesk.CN)內(nèi)容編輯...
摘要:采用前后端分離模式可以減后臺(tái)負(fù)擔(dān),加快研發(fā)效率,當(dāng)然,前提是前端能做好的話(huà)。還是基礎(chǔ)不夠?qū)е碌暮蠖耸欠耧L(fēng)格很多公司采用了前后端分離模式后,后端仍然采用以往的傳統(tǒng)風(fēng)格,這是不合理的,風(fēng)格的應(yīng)該是前后端分離的最佳實(shí)踐。 showImg(https://segmentfault.com/img/bVFC8f?w=690&h=360);早期的web開(kāi)發(fā)是不分前端后端的。互聯(lián)網(wǎng)進(jìn)入Web2.0時(shí)...
摘要:采用前后端分離模式可以減后臺(tái)負(fù)擔(dān),加快研發(fā)效率,當(dāng)然,前提是前端能做好的話(huà)。還是基礎(chǔ)不夠?qū)е碌暮蠖耸欠耧L(fēng)格很多公司采用了前后端分離模式后,后端仍然采用以往的傳統(tǒng)風(fēng)格,這是不合理的,風(fēng)格的應(yīng)該是前后端分離的最佳實(shí)踐。 showImg(https://segmentfault.com/img/bVFC8f?w=690&h=360);早期的web開(kāi)發(fā)是不分前端后端的。互聯(lián)網(wǎng)進(jìn)入Web2.0時(shí)...
閱讀 1066·2023-01-14 11:38
閱讀 1062·2023-01-14 11:04
閱讀 902·2023-01-14 10:48
閱讀 2378·2023-01-14 10:34
閱讀 1147·2023-01-14 10:24
閱讀 1026·2023-01-14 10:18
閱讀 654·2023-01-14 10:09
閱讀 733·2023-01-14 10:02