英文 |Command-line usagehtml
出處 | nox 官方文檔python
譯者 | 豌豆花下貓@Python貓git
Github地址:https://github.com/chinesehuazhou/noxdoccngithub
聲明:本翻譯基於CC BY-NC-SA 4.0受權協議,內容略有改動,轉載請保留原文出處,請勿用於商業或非法用途。shell
接上篇《Python 任務自動化工具:nox 的配置與 API》django
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 參數如何,都會顯示全部命令的全部輸出。
你能夠經過指定--report
以json
格式輸出報告:
nox --report status.json複製代碼
nox 臨時性支持在 Windows 上運行。可是,這取決於你的 Windows,Python 和虛擬環境的版本可能會出現問題。有關更多信息,請參見如下內容:
Windows 上的 Python 二進制文件可經過 Windows 的 Python 啓動器(py )找到。例如,經過肯定py -3.5
會調用哪一個可執行文件,以此來找到 Python 3.5 。若是一個測試須要使用特定的 Python 的 32 位版本,則應使用X.Y-32
做爲版本。
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
不夠聰明,沒法將其轉換爲參數化的會話,可是手動提取通用配置以進行參數化應該很簡單。 將適當的命令添加到 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進階系列、好書推薦系列、技術寫做、優質英文推薦與翻譯等等,歡迎關注哦。