英文 |Command-line usage
出處 | nox 官方文檔
譯者 | 豌豆花下貓@Python貓
Github地址:https://github.com/chinesehuazhou/nox_doc_cn
聲明:本翻譯基於CC BY-NC-SA 4.0授權協議,內容略有改動,轉載請保留原文出處,請勿用於商業或非法用途。
接上篇《Python 任務自動化工具:nox 的配置與 API》
調用方式
nox 通常是在命令行上被調用的:
<code>nox/<code>
你還可以通過 Python 解釋器調用 nox:
<code>python3-mnox/<code>
列出可用的會話
列出所有可用的會話,包括參數化的會話:
<code>nox-lnox--listnox--list-sessions/<code>
運行所有會話
你可以不帶任何參數地執行 nox 來運行每個會話:
<code>nox/<code>
會話被執行的順序是它們在 noxfile 中出現的順序。
指定一個或多個會話
默認情況下,nox 將運行在 noxfile 中定義的所有會話。但是,你可以選擇使用--session、-s 或-e 運行特定的一組:
<code>nox--sessiontestsnox-slinttestsnox-elint/<code>
你還可以使用NOXSESSION環境變量:
<code>NOXSESSION=lintnoxNOXSESSION=lint,testsnox/<code>
nox 將按照指定的順序運行這些會話。
你還可以使用pytest-風格的關鍵字來過濾測試會話:
<code>nox-k"notlint"nox-k"testsandnotlint"/<code>
指定參數化的會話
如果你有參數化的會話,例如:
<code>@nox.parametrize('django',['1.9','2.0'])deftests(session,django):.../<code>
那麼運行nox --session tests,實際上將運行該會話的所有參數化版本。如果你要使用一組特定的參數化參數運行會話,則可以使用會話名稱來指定它們:
<code>nox--session"tests(django='1.9')"nox--session"tests(django='2.0')"/<code>
重用虛擬環境
默認情況下,nox 在每次運行時都會刪除並重新創建虛擬環境(virtualenv)。通常,對於大多數項目和持續集成環境而言,這都是很好的,因為pip的緩存使得重新安裝相當快。但是,在某些情況下,在兩次運行之間重用虛擬環境是更有利的。使用-r或--reuse-existing-virtualenvs:
<code>nox-rnox--reuse-existing-virtualenvs/<code>
如果 noxfile 設置了nox.options.reuse_existing_virtualenvn,你可以在命令行使用--no-reuse-existing-virtualenvs 覆蓋 noxfile 的設置。
如果有會話失敗,則停止
默認情況下,即使一個會話失敗,nox 也將繼續運行所有會話。一旦第一個會話失敗,你可以使用--stop-on-first-error來使 nox 中止:
<code>nox--stop-on-first-error/<code>
如果 noxfile 設置了nox.options.stop_on_first_error,你可以在命令行中使用--no-stop-on-first-error覆蓋 noxfile 的設置。
當缺失解釋器時令會話失敗
默認情況下,nox 將跳過找不到 Python 解釋器的會話。如果你希望 nox 將這些會話標記為失敗,你可以使用--error-on-missing-interpreters:
<code>nox--error-on-missing-interpreters/<code>
如果 noxfile 設置了nox.options.error_on_missing_interpreters,你可以在命令行中使用--no-error-on-missing-interpreters覆蓋 noxfile 設置。
禁止外部程序
默認情況下,對於未在會話的虛擬環境中安裝的程序,nox 會發出警告,但最終會允許你運行它。如果 nox 在非顯式將external = True 傳遞給session.run 的情況下,還使用任意外部程序,則你可以使用--error-on-external-run來使它失敗:
<code>nox--error-on-external-run/<code>
如果 noxfile 設置了nox.options.error_on_external_run,你可以在命令行中使用--no-error-on-external-run覆蓋 noxfile 設置。
指定其它配置文件
如果由於某種原因你的 noxfile 沒有命名為 noxfile.py ,你可以使用--noxfile 或-f :
<code>nox--noxfilesomething.pynox-fsomething.py/<code>
將虛擬環境存儲在其它目錄中
默認情況下,nox 將虛擬環境存儲在./.nox中,但是,你可以使用--envdir進行更改:
<code>nox--envdir/tmp/envs/<code>
跳過除安裝命令外的所有內容
在很多情況下,僅需要 nox 運行安裝命令,例如準備環境作離線測試,或者重新創建用於測試的虛擬環境。你可以使用--install-only跳過 run 命令。
例如,給定這個 noxfile:
<code>@nox.sessiondeftests(session):session.install("pytest")session.install(".")session.run("pytest")/<code>
運行:
<code>nox--install-only/<code>
將同時運行兩個 install 命令,但跳過 run 命令:
<code>nox>Runningsessiontestsnox>Creatingvirtualenvusingpython3.7in./.nox/testsnox>pipinstallpytestnox>pipinstall.nox>Skippingpytestrun,as--install-onlyisset.nox>Sessiontestswassuccessful./<code>
強制非交互行為
session.interactive可用於判斷 nox 是在交互式終端(例如一個實際的人在其計算機上運行它)還是在非交互式終端(例如一個連續集成系統)中運行。
<code>@nox.sessiondefdocs(session):...ifsession.interactive:nox.run("sphinx-autobuild",...)else:nox.run("sphinx-build",...)/<code>
有時,需要強制 nox 將會話視為非交互式的。你可以使用--non-interactive參數來執行此操作:
<code>nox--non-interactive/<code>
這會使得session.interactive始終返回 False 。
控制彩色輸出
默認情況下,如果你在交互式終端中使用,則 nox 將輸出彩色的日誌。但是,如果要將stderr重定向到文件,或者不使用交互式終端,或者設置了環境變量NO_COLOR,則 nox 會以純文本格式輸出。
你可以使用--nocolor和--forcecolor標誌來手動控制 nox 的輸出。
例如,這將始終輸出彩色日誌:
<code>nox--forcecolor/<code>
但是,這將永遠不會輸出彩色日誌:
<code>nox--nocolor/<code>
控制命令的詳細程度
默認情況下,nox 僅顯示失敗的命令的輸出,當給命令傳遞了silent = False 時,沒有輸出。通過將--verbose傳遞給 nox,無論 silent 參數如何,都會顯示所有命令的所有輸出。
輸出機器可讀的報告
你可以通過指定--report以json格式輸出報告:
<code>nox--reportstatus.json/<code>
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:
<code>pipinstall--upgradenox[tox_to_nox]/<code>
然後,只需在 tox.ini 所在的目錄中運行tox-to-nox:
<code>tox-to-nox/<code>
這將基於 tox.ini 中的環境創建一個 noxfile.py。一些注意事項:
- 生成環境 可以工作,但是會被轉換為單獨的環境。tox-to-nox不夠聰明,無法將其轉換為參數化的會話,但是手動提取通用配置以進行參數化應該很簡單。
- 由於 tox 解析其配置的方式,所有替換項 會在轉換時被引入。這意味著你需要用適當的變量替換 noxfile.py 中的靜態字符串。
- 幾種不常用的 tox 選項尚未實現,但有可能實現。如果遇到你認為有用的功能,請提出功能請求(feature request)。
shell 補齊
將適當的命令添加到 shell 的配置文件中,以便在啟動時運行。你可能需要重啟或重新登錄,才能使自動補齊功能生效。
bash
<code>eval"$(register-python-argcompletenox)"/<code>
zsh
<code>#Toactivatecompletionsforzshyouneedtohave#bashcompinitenabledinzsh:autoload-Ubashcompinitbashcompinit#Afterwardsyoucanenablecompletionfornox:eval"$(register-python-argcompletenox)"/<code>
tcsh
<code>eval`register-python-argcomplete--shelltcshnox`/<code>
fish
<code>register-python-argcomplete--shellfishnox|./<code>
閱讀更多 Python貓 的文章