搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

更好用的 Python 任务自动化工具:nox 官方教程

[复制链接]
查看: 101|回复: 0

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32601
发表于 2020-1-15 00:08 | 显示全部楼层 |阅读模式
英文| nox tutorial
出处| nox 官方文档
译者| 豌豆花下猫@Python猫
Github地址:https://github.com/chinesehuazhou/nox_doc_cn
声明:本翻译基于CC BY-NC-SA 4.0授权协议,内容略有修改,转载请保存原文出处,请勿用于贸易或不法用处。
本教程将指导你学会安装、设备和运转 Nox。
安装

Nox 可以经过pip轻松安装:
  1. python3 -m pip install nox
复制代码
你大要渴望操纵用户站点(user site)来禁止对全局的 Python install 形成紊乱:
  1. python3 -m pip install --user nox
复制代码
大要,你也可以更风雅,操纵pipx
  1. pipx install nox
复制代码
不管用哪类方式,Nox 凡是是要全局安装的,类似于 tox、pip和此外类似的工具。
假如你有爱幸亏docker 内运转 nox,可以操纵 DockerHub 上的thekevjames/nox镜像,它包含全数 nox 版本的构建与及全数支持的 Python 版本。
假如你想在GitHub Actions中运转 nox ,则可以操纵Activatedleigh/setup-nox action,它将安装最新的 nox,并令 GitHub Actions 情况供给的全数 Python 版本可用。
编写设备文件

Nox 经过项目目录中一个名为 noxfile.py 的文件作设备 。这是一个 Python文件,界说了一组会话(sessions)。一个会话是一个情况和一组在这个情况中运转的命令。假如你熟悉 tox,会话就类似于它的情况。假如你熟悉 GNU Make,会话则类似于它的 target。
会话操纵 @nox.session 装潢器作声明。这方式类似于 Flask 操纵 @app.route。
下面是一个底子的 Nox 文件,对 example.py 运转flake8(你可以自己建立example.py):
  1. import nox@nox.sessiondef lint(session):    session.install("flake8")    session.run("flake8", "example.py")
复制代码
第一次运转 Nox

现在,你已经安装了 Nox 并具有一个设备文件, 那便可以运转 Nox 了!在终端中翻开项目标目录,然后运转nox 。你应当会看到类似这样的内容:
  1. $ noxnox > Running session lintnox > Creating virtualenv using python3.7 in .nox/lintnox > pip install flake8nox > flake8 example.pynox > Session lint was successful.
复制代码
现在你已第一次乐成地操纵 Nox 啦!
本教程的此内部分将带你进修此外可以用 Nox 完成的常见操纵。假如必要的话,你还可以跳至命令行用法设备&API文档。
安装依靠项

Nox 底子上是将 session.install 转达给 pip ,是以你可以用凡是的方式来安装工具。这里有一些例子:
(1)一次安装一个或多个包:
  1. @nox.sessiondef tests(session):    # same as pip install pytest protobuf>3.0.0    session.install("pytest", "protobuf>3.0.0")    ...
复制代码
(2)按照 requirements.txt 文件安装:
  1. @nox.sessiondef tests(session):    # same as pip install -r -requirements.txt    session.install("-r", "requirements.txt")    ...
复制代码
(3)假如你的项目是一个 Python 包,而你想安装它:
  1. @nox.sessiondef tests(session):    # same as pip install .    session.install(".")    ...
复制代码
运转命令

session.run 函数可让你在会话的捏造情况的高低文中运转命令。以下是一些示例:
(1)你可以安装和运转 Python 工具:
  1. @nox.sessiondef tests(session):    session.install("pytest")    session.run("pytest")
复制代码
(2)假如你想给一个步伐转达更多的参数,只需给 run 增加更多参数即可:
  1. @nox.sessiondef tests(session):    session.install("pytest")    session.run("pytest", "-v", "tests")
复制代码
(3)你还可以转达情况变量:
  1. @nox.sessiondef tests(session):    session.install("black")    session.run(        "pytest",        env={            "FLASK_DEBUG": "1"        }    )
复制代码
有关运转步伐的更多选项和示例,请拜见nox.sessions.Session.run()
选摘要运转的会话

一旦你的 Noxfile 中有多个会话,你会留意到 Nox 将默许运转全数的会话。尽管这很有用,可是凡是一次只必要运转一两个。
你可以操纵--sessions参数(或-s)来选摘要运转的会话。你可以操纵--list参数表示哪些会话可用,哪些将会运转。这里有一些例子:
这是一个具有三个会话的 Noxfile:
  1. import nox@nox.sessiondef test(session):    ...@nox.sessiondef lint(session):    ...@nox.sessiondef docs(session):    ...
复制代码
假如你只运转nox --list ,则会看到全数会话都被选中:
  1. Sessions defined in noxfile.py:* test* lint* docssessions marked with * are selected,sessions marked with - are skipped.
复制代码
假如你运转nox --list --sessions lint,Nox 将只运转 lint 会话:
  1. nox > Running session lintnox > Creating virtualenv using python3 in .nox/lintnox > ...nox > Session lint was successful.
复制代码
还有更多挑选和运转会话的方式!你可以在命令行用法中阅读更多有关挪用 Nox 的信息。
针对差此外多个 Python 举行测试

很多项目必要支持一个特定的 Python 版本大要多个 Python 版本。你可以经过给 @nox.session 指定 Python,来使 Nox 针对多个表白器运转会话。这里有一些例子:
(1)假如你渴望会话仅针对 Python 的单个版本运转:
  1. @nox.session(python="3.7")def test(session):    ...
复制代码
(2)假如你渴望会话在 Python 的多个版本上运转:
  1. @nox.session(python=["2.7", "3.5", "3.7"])def test(session):    ...
复制代码
你会留意到,运转nox --list将表示此会话已扩大为三个差此外会话:
  1. Sessions defined in noxfile.py:* test-2.7* test-3.5* test-3.7
复制代码
你可以操纵nox --sessions test运转全数 test 会话,也可以操纵列表中表示的全名来运转单个 test 会话,例如,nox --sessions test-3.5。有关挑选会话的更多具体信息,请拜见命令行用法文档。
你可以在会话的virtualenv设备里,阅读到更多关于设备会话所用的捏造情况的信息。
与 conda 一路测试

一些项目,出格是在数据科学社区,必要在 conda 情况中测试其操纵的情况。假如你渴望会话在 conda 情况中运转:
  1. @nox.session(venv_backend="conda")def test(session):    ...
复制代码
操纵 conda 安装软件包:
  1. session.conda_install("pytest")
复制代码
可以用 pip 安装软件包进 conda 情况中,可是最好的理论是仅操纵--no-deps 选项安装。这样可以禁止 pip 安装的包与 conda 安装的包不兼容,避免 pip 破坏 conda 情况。
  1. session.install("contexter", "--no-deps")session.install("-e", ".", "--no-deps")
复制代码
参数化

就像 Nox 可以控制运转多个表白器一样,它也可以操纵nox.parametrize()装潢器,来处置赏罚带有一系列不同参数的会话。
这是一个简短示例,操纵参数化对两个不同版本的 Django 举行测试:
  1. @nox.session@nox.parametrize("django", ["1.9", "2.0"])def test(session, django):    session.install(f"django=={django}")    session.run("pytest")
复制代码
假如运转nox --list ,你将会看到 Nox 把一个会话扩大为了多个会话。每个会话将获得你想转达给它的一个参数值:
  1. Sessions defined in noxfile.py:* test(django='1.9')* test(django='2.0')
复制代码
nox.parametrize() 的接口和用法特地类似于pytest的parametrize。这是 Nox 的一项极为强大的功用。你可以在参数化会话上,阅读更多有关参数化的信息与示例。
(译注:关于 pytest 和此外支流测试框架是怎样操纵参数化功用的?请参阅《Python 中怎样实现参数化测试?》)
下一步

看看你!你现在底子上是一个 Nox 专家啦!
到了这一步,你还可以:
玩得高兴!
相关链接:

[1]nox tutorial:https://nox.thea.codes/en/stable/tutorial.html
[2]pip:https://pip.readthedocs.org/
[3]用户站点:https://packaging.python.org/tutorials/installing-packages/%23installing-to-the-user-site#installing-to-the-user-site
[4]pipx:https://packaging.python.org/guides/installing-stand-alone-command-line-tools/
[5]docker:https://www.docker.com/
[6]thekevjames/nox镜像:https://hub.docker.com/r/thekevjames/nox
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 全椒百姓网-全椒知名**,发布及时新鲜的全椒新闻资讯 生活信息 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表