本文关键阐述了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中指定的两个选项都将被忽略。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/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)内容编辑...
阅读 912·2023-01-14 11:38
阅读 879·2023-01-14 11:04
阅读 743·2023-01-14 10:48
阅读 1997·2023-01-14 10:34
阅读 944·2023-01-14 10:24
阅读 823·2023-01-14 10:18
阅读 500·2023-01-14 10:09
阅读 573·2023-01-14 10:02