共计 4066 个字符,预计需要花费 11 分钟才能阅读完成。
调用形式
nox 通常是在命令行上被调用的:
nox
你还能够通过 Python 解释器调用 nox:
python3 -m nox
列出可用的会话
列出所有可用的会话,包含参数化的会话:
nox -l
nox --list
nox --list-sessions
运行所有会话
你能够不带任何参数地执行 nox 来运行每个会话:
nox
会话被执行的程序是它们在 noxfile 中呈现的程序。
指定一个或多个会话
默认状况下,nox 将运行在 noxfile 中定义的所有会话。然而,你能够抉择应用 –session、-s 或 -e 运行特定的一组:
nox --session tests
nox -s lint tests
nox -e lint
你还能够应用 NOXSESSION 环境变量:
NOXSESSION=lint nox
NOXSESSION=lint,tests nox
nox 将依照指定的程序运行这些会话。
你还能够应用 pytest- 格调的关键字来过滤测试会话:
nox -k "not lint"
nox -k "tests and not lint"
指定参数化的会话
如果你有参数化的会话,例如:
@nox.parametrize('django', ['1.9', '2.0'])
def tests(session, django):
...
那么运行 nox –session tests,实际上将运行该会话的所有参数化版本。如果你要应用一组特定的参数化参数运行会话,则能够应用会话名称来指定它们:
nox --session "tests(django='1.9')"
nox --session "tests(django='2.0')"
重用虚拟环境
默认状况下,nox 在每次运行时都会删除并从新创立虚拟环境(virtualenv)。通常,对于大多数我的项目和继续集成环境而言,这都是很好的,因为 pip 的缓存使得重新安装相当快。然而,在某些状况下,在两次运行之间重用虚拟环境是更无利的。应用 - r 或 –reuse-existing-virtualenvs:
nox -r
nox --reuse-existing-virtualenvs
如果 noxfile 设置了 nox.options.reuse_existing_virtualenvn,你能够在命令行应用 –no-reuse-existing-virtualenvs 笼罩 noxfile 的设置。
如果有会话失败,则进行
默认状况下,即便一个会话失败,nox 也将持续运行所有会话。一旦第一个会话失败,你能够应用 –stop-on-first-error 来使 nox 停止:
nox --stop-on-first-error
如果 noxfile 设置了 nox.options.stop_on_first_error,你能够在命令行中应用 –no-stop-on-first-error 笼罩 noxfile 的设置。
当缺失解释器气节会话失败
默认状况下,nox 将跳过找不到 Python 解释器的会话。如果你心愿 nox 将这些会话标记为失败,你能够应用 –error-on-missing-interpreters:
nox --error-on-missing-interpreters
如果 noxfile 设置了 nox.options.error_on_missing_interpreters,你能够在命令行中应用 –no-error-on-missing-interpreters 笼罩 noxfile 设置。
禁止内部程序
默认状况下,对于未在会话的虚拟环境中装置的程序,nox 会收回正告,但最终会容许你运行它。如果 nox 在非显式将 external = True 传递给 session.run 的状况下,还应用任意内部程序,则你能够应用 –error-on-external-run 来使它失败:
nox --error-on-external-run
如果 noxfile 设置了 nox.options.error_on_external_run,你能够在命令行中应用 –no-error-on-external-run 笼罩 noxfile 设置。
指定其它配置文件
如果因为某种原因你的 noxfile 没有命名为 noxfile.py,你能够应用 –noxfile 或 -f:
nox --noxfile something.py
nox -f something.py
将虚拟环境存储在其它目录中
默认状况下,nox 将虚拟环境存储在./.nox 中,然而,你能够应用 –envdir 进行更改:
nox --envdir /tmp/envs
跳过除装置命令外的所有内容
在很多状况下,仅须要 nox 运行装置命令,例如筹备环境作离线测试,或者从新创立用于测试的虚拟环境。你能够应用 –install-only 跳过 run 命令。
例如,给定这个 noxfile:
@nox.session
def tests(session):
session.install("pytest")
session.install(".")
session.run("pytest")
运行:
nox --install-only
将同时运行两个 install 命令,但跳过 run 命令:
nox > Running session tests
nox > Creating virtualenv using python3.7 in ./.nox/tests
nox > pip install pytest
nox > pip install .
nox > Skipping pytest run, as --install-only is set.
nox > Session tests was successful.
强制非交互行为
session.interactive 可用于判断 nox 是在交互式终端(例如一个理论的人在其计算机上运行它)还是在非交互式终端(例如一个间断集成系统)中运行。
@nox.session
def docs(session):
...
if session.interactive:
nox.run("sphinx-autobuild", ...)
else:
nox.run("sphinx-build", ...)
有时,须要强制 nox 将会话视为非交互式的。你能够应用 –non-interactive 参数来执行此操作:
nox --non-interactive
这会使得 session.interactive 始终返回 False。
管制黑白输入
默认状况下,如果你在交互式终端中应用,则 nox 将输入黑白的日志。然而,如果要将 stderr 重定向到文件,或者不应用交互式终端,或者设置了环境变量 NO_COLOR,则 nox 会以纯文本格式输入。
你能够应用 –nocolor 和 –forcecolor 标记来手动管制 nox 的输入。
例如,这将始终输入黑白日志:
nox --forcecolor
然而,这将永远不会输入黑白日志:
nox --nocolor
管制命令的具体水平
默认状况下,nox 仅显示失败的命令的输入,当给命令传递了 silent = False 时,没有输入。通过将 –verbose 传递给 nox,无论 silent 参数如何,都会显示所有命令的所有输入。
输入机器可读的报告
你能够通过指定 –report 以 json 格局输入报告:
nox --report status.json
Windows
nox 临时性反对在 Windows 上运行。然而,这取决于你的 Windows,Python 和虚拟环境的版本可能会呈现问题。无关更多信息,请参见以下内容:
- tox issue 260
- Python issue 24493
- Virtualenv issue 774
Windows 上的 Python 二进制文件可通过 Windows 的 Python 启动器(py)找到。例如,通过确定 py -3.5 会调用哪个可执行文件,以此来找到 Python 3.5。如果一个测试须要应用特定的 Python 的 32 位版本,则应应用 X.Y-32 作为版本。
从 tox 转化
nox 具备将 tox.ini 文件转换为 noxfile.py 文件的实验性反对。它还不反对 tox 的所有性能,仅用于实现适度转换的大部分机械工作,你可能仍须要对转换后的 noxfile.py 作一些批改。
要应用转换器,请在装置 nox 时附上 tox_to_nox:
pip install --upgrade nox[tox_to_nox]
而后,只需在 tox.ini 所在的目录中运行 tox-to-nox:
tox-to-nox
这将基于 tox.ini 中的环境创立一个 noxfile.py。一些注意事项:
- 生成环境 能够工作,然而会被转换为独自的环境。tox-to-nox 不够聪慧,无奈将其转换为参数化的会话,然而手动提取通用配置以进行参数化应该很简略。
- 因为 tox 解析其配置的形式,所有替换项 会在转换时被引入。这意味着你须要用适当的变量替换 noxfile.py 中的动态字符串。
- 几种不罕用的 tox 选项尚未实现,但有可能实现。如果遇到你认为有用的性能,请提出性能申请(feature request)。
shell 补齐
将适当的命令增加到 shell 的配置文件中,以便在启动时运行。你可能须要重启或从新登录,能力使主动补齐性能失效。
bash
eval "$(register-python-argcomplete nox)"
zsh
# To activate completions for zsh you need to have
# bashcompinit enabled in zsh:
autoload -U bashcompinit
bashcompinit
# Afterwards you can enable completion for nox:
eval "$(register-python-argcomplete nox)"
tcsh
eval `register-python-argcomplete --shell tcsh nox`
fish
register-python-argcomplete --shell fish nox | .
以上就是本次分享的所有内容,想要理解更多 python 常识欢送返回公众号:Python 编程学习圈,发送“J”即可收费获取,每日干货分享