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