obsidian_love/組織/EverfortuneAI/{Note} Nox.md

2.9 KiB
Raw Permalink Blame History

author date category tags
deng 20250109 Note
Python
Nox
FlexibleTest
Versioning
Note

cover image resource

  • Abstract
    • 在將Python專案打包時會遇到填寫依賴套件及其版本的問題開發者必須逐一測試Python版本與依賴套件版本之間甚至是跨平台不同組合的可運行性而Nox可以將這一流程自動化。
  • Steps
    1. 在開發環境中安裝Noxpython -m pip install nox
    2. 在Package資料夾中產生noxfile.py 並撰寫測試程式碼範例程式碼可見Note
    3. 於終端機輸入nox 開始進行測試
  • Note
    • 若只想執行某個函式的程式碼,可執行nox -s [function_name]
    • 若想將測試結果輸出檔案(測試組合很多的時候很適合),可執行nox --report [file_name].json
    • 小知識如果semantic version沒有給patch的話則其為0比方說我們要測試的numpy版本設為1.24則其實際測試的版本為1.24.0
    • 測試的環境會放在.nox通常以python搭配套件名稱進行資料夾命名若套件太多則會hash成短名稱如果使用reuse_venv則nox會去重新使用這些環境檔進行測試可節省重新建立環境的時間
    • 若無特殊需求session的venv_backend建議使用預設的venv即可較省空間
    • 以下為noxfile.py範例程式碼(透過環境是否能順利通過單元測試來判別套件之間的匹配性)
# noxfile.py
#
# author: deng
# date : 20250110

import nox


nox.options.sessions = [
    'test_flexibility'
]
nox.options.report = 'report.json'


@nox.session(venv_backend='conda', python=['3.10', '3.11', '3.12'])
@nox.parametrize('numpy', ['1.26', '2.0'])
@nox.parametrize('scikit_learn', ['1.5', '1.6'])
def test_flexibility(session, numpy, scikit_learn):

    # Install package dependencies
    session.install(f'numpy=={numpy}')
    session.install(f'scikit-learn=={scikit_learn}')

    # Test
    session.install('pytest')
    session.run('pytest', 'tests', '-v')
  • Issues
    1. 在某些依賴套件組合下load_model在進行reload測試時會報錯原因是舊模型與新模型的記憶體位置相同導致AssertionError詳細原因需調查
    2. 將nox的venv_backend設為conda並開啟reuse_venv進行測試測試一陣子後會開始出現conda error猜測原因是reuse的機制出問題如果是新創造的conda env就沒問題沒開啟reuse會很耗時目前一個環境的容量約5GB安裝得花不少時間
      • 發現是conda的問題可見github討論串),使用conda clean -a將套件暫存與快取清除就可以跑conda create了詳細原因需調查
    3. 呈上若把venv_backend改成預設的venv在測試一段時間後仍會報錯原因可能跟上述相同目前無法還原錯誤