本教程将指导您安装、配置和运行Nox。安装Nox可以通过pip轻松安装:python3-mpipinstallnox你可能想使用用户站点(usersite)来避免与全局Python安装混淆:python3-mpipinstall--usernox或者,你可以更精炼一点,使用pipx:pipxinstallnox无论哪种方式,Nox通常都是全局安装的,类似于tox、pip等类似工具。如果您对在docker中运行nox感兴趣,可以使用DockerHub上的kevjames/nox图像,其中包含所有nox版本和所有受支持的Python版本的构建。如果要在GitHubActions中运行nox,可以使用Activatedleigh/setup-nox操作,这将安装最新的nox并使GitHubActions环境提供的所有Python版本可用。编写配置文件Nox通过项目目录下名为noxfile.py的文件进行配置。这是一个定义一组会话的Python文件。会话是一个环境和一组在该环境中运行的命令。如果您熟悉tox,会话与其环境类似。如果您熟悉GNUMake,会话与其目标类似。会话是使用@nox.session装饰器声明的。这类似于Flask使用@app.route的方式。这是在example.py上运行flake8的基本Nox文件(您可以自己创建example.py):example.py")第一次运行Nox现在您已经安装了Nox和一个配置文件,是时候运行Nox了!在终端中打开项目目录,然后运行??nox。您应该看到类似这样的内容:$noxnox>Runningsessionlintnox>Creatingvirtualenvusingpython3.7in.nox/lintnox>pipinstallflake8nox>flake8example.pynox>Sessionlint成功。?现在你已经第一次成功使用Nox了!?本教程的其余部分将带您完成可以使用Nox完成的其他常见操作。如果需要,您还可以跳到命令行用法和配置以及API文档。安装依赖项Nox基本上将session.install传递给pip,因此您可以按照通常的方式安装东西。下面是一些示例:(1)一次安装一个或多个包:@nox.sessiondeftests(session):#与pipinstallpytestprotobuf>3.0.0session.install("pytest","protobuf>3.0.0")...(2)根据requirements.txt文件安装:@nox.sessiondeftests(session):#同pipinstall-r-requirements.txtsession.install("-r","requirements.txt")...(3)如果你的项目是一个Python包并且你想安装它:@nox.sessiondeftests(session):#sameaspipinstall.session.install(".")...运行命令会话.run函数允许您在会话的虚拟环境上下文中运行命令。以下是一些示例:(1)您可以安装并运行Python工具:@nox.sessiondeftests(session):session.install("pytest")session.run("pytest")(2)如果您想提供一个program要传递更多参数,只需添加更多参数即可运行:@nox.sessiondeftests(session):session.install("pytest")session.run("pytest","-v","tests")(3)也可以传环境变量:@nox.sessiondeftests(session):session.install("black")session.run("pytest",env={"FLASK_DEBUG":"1"})关于运行见nox.sessions.Session.run()以获得更多选项和程序示例。选择要运行的会话一旦您的Noxfile中有多个会话,您会注意到Nox将默认运行所有这些会话。虽然这很有用,但您通常一次只需要运行一两个。您可以使用--sessions参数(或-s)来选择要运行的会话。您可以使用--list参数来显示哪些会话可用以及哪些将要运行。以下是一些示例:这是一个包含三个会话的Noxfile:importnox@nox.sessiondeftest(session):...@nox.sessiondeflint(session):...@nox.sessiondefdocs(session):...如果你只是运行nox--list,你会看到所有会话都被选中:在noxfile.py:*test*lint*docssession中定义的会话被选中,标有-的会话被跳过。如果你运行nox--list--sessionslint,Nox将只运行lint会话:nox>Runningsessionlintnox>Creatingvirtualenvusingpython3in.nox/lintnox>...nox>Sessionlint成功。更多选项和运行对话方法!您可以在命令行用法中阅读有关调用Nox的更多信息。针对多个Python进行测试许多项目需要支持特定的Python版本或多个Python版本。您可以通过为@nox.session指定Python让Nox针对多个解释器运行会话。以下是一些示例:(1)如果您希望会话仅针对单个版本的Python运行:@nox.session(python="3.7")deftest(session):...(2)如果您希望针对单个版本的Python运行的会话在多个版本上运行:@nox.session(python=["2.7","3.5","3.7"])deftest(session):...你会注意到运行nox--list将显示此会话扩展为三个不同的会话:在noxfile.py中定义的会话:*test-2.7*test-3.5*test-3.7您可以使用nox--sessionstest运行所有测试会话或使用显示的全名在列表中运行单个测试会话,例如,nox--sessionstest-3.5。有关选择会话的更多详细信息,请参阅命令行使用文档。您可以在会话的virtualenv配置中阅读有关配置会话使用的虚拟环境的更多信息。使用conda测试某些项目,特别是在数据科学社区中,需要测试它们在conda环境中的使用。如果想让session在conda环境下运行:@nox.session(venv_backend="conda")deftest(session):...用conda安装包:session.conda_install("pytest")可以安装包使用pip进入conda环境,但最佳做法是仅使用--no-deps选项安装。这可以防止pip安装的包与conda安装的包不兼容,并防止pip破坏conda环境。session.install("contexter","--no-deps")session.install("-e",".","--no-deps")像Nox一样参数化可以控制运行多个解释器,也可以使用nox.parametrize()装饰器来处理具有一系列不同参数的会话。这是一个简短的例子,使用参数化来测试Django的两个不同版本:@nox.session@nox.parametrize("django",["1.9","2.0"])deftest(session,django):session.install(f"django=={django}")session.run("pytest")如果你运行nox--list,你会看到Nox将一个会话扩展为多个会话。每个会话都会得到一个你想传递给它的参数值:Sessionsdefinedinnoxfile.py:*test(django='1.9')*test(django='2.0')interfaceandusageofnox.parametrize()specifically类似于pytest的参数化。这是Nox的一个非常强大的功能。您可以在参数化会话中通过示例阅读有关参数化的更多信息。以上就是本次分享的全部内容。想了解更多python知识,请前往公众号:Python编程学习圈,发“J”免费领取,每日干货分享
