资讯专栏INFORMATION COLUMN

Python每日任务自动化软件nox的配备与API详细信息

89542767 / 264人阅读

  本文关键阐述了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

相关文章

  • 让VIM支持Python2 by update-alternatives

    摘要:前言中所安装的只支持,但很多插件如和均需要,那就来场生命贵在折腾吧自检在中输入以下命令,若出现则表示不支持,则表示支持表示不支持,则表示支持。重置符号链接然后输入按回车。上图中的值最高,因此若处于时,应该为。 前言  Ubuntu 16+中$ sudo apt install vim所安装的vim只支持Python3,但很多插件如YCM和powerline均需要Python2,那就来场...

    honmaple 评论0 收藏0
  • 15个Python库,让你学习数据科学更轻松

    摘要:在本节中,我们将看到一些最流行和最常用的库,用于机器学习和深度学习是用于数据挖掘,分析和机器学习的最流行的库。愿码提示网址是一个基于的框架,用于使用多个或进行有效的机器学习和深度学习。 showImg(https://segmentfault.com/img/remote/1460000018961827?w=999&h=562); 来源 | 愿码(ChainDesk.CN)内容编辑...

    W4n9Hu1 评论0 收藏0
  • 前后端分离模式

    摘要:采用前后端分离模式可以减后台负担,加快研发效率,当然,前提是前端能做好的话。还是基础不够导致的后端是否风格很多公司采用了前后端分离模式后,后端仍然采用以往的传统风格,这是不合理的,风格的应该是前后端分离的最佳实践。 showImg(https://segmentfault.com/img/bVFC8f?w=690&h=360);早期的web开发是不分前端后端的。互联网进入Web2.0时...

    fobnn 评论0 收藏0
  • 前后端分离模式

    摘要:采用前后端分离模式可以减后台负担,加快研发效率,当然,前提是前端能做好的话。还是基础不够导致的后端是否风格很多公司采用了前后端分离模式后,后端仍然采用以往的传统风格,这是不合理的,风格的应该是前后端分离的最佳实践。 showImg(https://segmentfault.com/img/bVFC8f?w=690&h=360);早期的web开发是不分前端后端的。互联网进入Web2.0时...

    DesGemini 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<