進一步學習 nox 教程,輕鬆掌握命令行用法

英文 |Command-line usagehtml

出處 | nox 官方文檔python

譯者 | 豌豆花下貓@Python貓git

Github地址:https://github.com/chinesehuazhou/noxdoccngithub

聲明:本翻譯基於CC BY-NC-SA 4.0受權協議,內容略有改動,轉載請保留原文出處,請勿用於商業或非法用途。shell

接上篇《Python 任務自動化工具:nox 的配置與 APIdjango

調用方式

nox 一般是在命令行上被調用的:json

nox複製代碼

你還能夠經過 Python 解釋器調用 nox:windows

python3 -m nox複製代碼

列出可用的會話

列出全部可用的會話,包括參數化的會話:緩存

nox -l
nox --list
nox --list-sessions複製代碼

運行全部會話

你能夠不帶任何參數地執行 nox 來運行每一個會話:
bash

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 參數如何,都會顯示全部命令的全部輸出。

輸出機器可讀的報告

你能夠經過指定--reportjson格式輸出報告:

nox --report status.json複製代碼

Windows

nox 臨時性支持在 Windows 上運行。可是,這取決於你的 Windows,Python 和虛擬環境的版本可能會出現問題。有關更多信息,請參見如下內容:

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進階系列、好書推薦系列、技術寫做、優質英文推薦與翻譯等等,歡迎關注哦。

相關文章
相關標籤/搜索