当前位置: 首页 > 后端技术 > Python

更好用的Python任务自动化工具:nox官方教程_0

时间:2023-03-26 11:45:24 Python

鑻辨枃|nox鏁欑▼婧恷nox瀹樻柟鏂囨。缈昏瘧|鏈炕璇戝熀浜嶤CBY-NC-SA4.0璁稿彲鍗忚锛屽唴瀹圭暐鏈夋敼鍔ㄣ€傝浆杞借淇濈暀鍘熷鍑哄锛岃鍕跨敤浜庡晢涓氭垨闈炴硶鐢ㄩ€斻€傛湰鏁欑▼灏嗗紩瀵兼偍瀹夎銆侀厤缃拰杩愯Nox銆傚畨瑁匩ox鍙互閫氳繃pip杞绘澗瀹夎锛歱ython3-mpipinstallnox浣犲彲鑳芥兂浣跨敤鐢ㄦ埛绔欑偣锛坲sersite锛夋潵閬垮厤涓庡叏灞€Python瀹夎娣锋穯锛歱ython3-mpipinstall--usernox鎴栬€咃紝浣犲彲浠ユ洿绮剧偧涓€鐐癸紝浣跨敤pipx锛歱ipxinstallnox鏃犺鍝鏂瑰紡锛孨ox閫氬父閮芥槸鍏ㄥ眬瀹夎鐨勶紝绫讳技浜巘ox銆乸ip绛夌被浼煎伐鍏枫€傚鏋滄偍瀵瑰湪docker涓繍琛宯ox鎰熷叴瓒o紝鍙互浣跨敤DockerHub涓婄殑kevjames/nox鍥惧儚锛屽叾涓寘鍚墍鏈塶ox鐗堟湰鍜屾墍鏈夊彈鏀寔鐨凱ython鐗堟湰鐨勬瀯寤恒€傚鏋滆鍦℅itHubActions涓繍琛宯ox锛屽彲浠ヤ娇鐢ˋctivatedleigh/setup-nox鎿嶄綔锛岃繖灏嗗畨瑁呮渶鏂扮殑nox骞朵娇GitHubActions鐜鎻愪緵鐨勬墍鏈塒ython鐗堟湰鍙敤銆傜紪鍐欓厤缃枃浠禢ox閫氳繃椤圭洰鐩綍涓嬪悕涓簄oxfile.py鐨勬枃浠惰繘琛岄厤缃€傝繖鏄竴涓畾涔変竴缁勪細璇濈殑Python鏂囦欢銆備細璇濇槸涓€涓幆澧冨拰涓€缁勫湪璇ョ幆澧冧腑杩愯鐨勫懡浠ゃ€傚鏋滄偍鐔熸倝tox锛屼細璇濅笌鍏剁幆澧冪被浼笺€傚鏋滄偍鐔熸倝GNUMake锛屼細璇濅笌鍏剁洰鏍囩被浼笺€備細璇濇槸浣跨敤@nox.session瑁呴グ鍣ㄥ0鏄庣殑銆傝繖绫讳技浜嶧lask浣跨敤@app.route鐨勬柟寮忋€傝繖鏄湪example.py涓婅繍琛宖lake8鐨勫熀鏈琋ox鏂囦欢锛堟偍鍙互鑷繁鍒涘缓example.py锛夛細example.py")绗竴娆¤繍琛孨ox鐜板湪鎮ㄥ凡缁忓畨瑁呬簡Nox鍜屼竴涓厤缃枃浠讹紝鏄椂鍊欒繍琛孨ox浜嗭紒鍦ㄧ粓绔腑鎵撳紑椤圭洰鐩綍锛岀劧鍚庤繍琛屸€嬧€媙ox銆傛偍搴旇鐪嬪埌绫讳技杩欐牱鐨勫唴瀹癸細$noxnox>Runningsessionlintnox>Creatingvirtualenvusingpython3.7in.nox/lintnox>pipinstallflake8nox>flake8example.pynox>Sessionlint鎴愬姛銆傗湪鐜板湪浣犲凡缁忕涓€娆℃垚鍔熶娇鐢∟ox浜嗭紒鉁ㄦ湰鏁欑▼鐨勫叾浣欓儴鍒嗗皢甯︽偍瀹屾垚鍙互浣跨敤Nox瀹屾垚鐨勫叾浠栧父瑙佹搷浣溿€傚鏋滈渶瑕侊紝鎮ㄨ繕鍙互璺冲埌鍛戒护琛岀敤娉曞拰閰嶇疆浠ュ強API鏂囨。銆傚畨瑁呬緷璧栭」Nox鍩烘湰涓婂皢session.install浼犻€掔粰pip锛屽洜姝ゆ偍鍙互鎸夌収閫氬父鐨勬柟寮忓畨瑁呬笢瑗裤€備笅闈㈡槸涓€浜涚ず渚嬶細(1)涓€娆″畨瑁呬竴涓垨澶氫釜鍖咃細@nox.sessiondeftests(session):#涓巔ipinstallpytestprotobuf>3.0.0session.install("pytest","protobuf>3.0.0")...(2)鏍规嵁requirements.txt鏂囦欢瀹夎锛欯nox.sessiondeftests(session):#鍚宲ipinstall-r-requirements.txtsession.install("-r","requirements.txt")...(3)濡傛灉浣犵殑椤圭洰鏄竴涓狿ython鍖呭苟涓斾綘鎯冲畨瑁呭畠锛欯nox.sessiondeftests(session):#sameaspipinstall.session.install(".")...杩愯鍛戒护浼氳瘽.run鍑芥暟鍏佽鎮ㄥ湪浼氳瘽鐨勮櫄鎷熺幆澧冧笂涓嬫枃涓繍琛屽懡浠ゃ€備互涓嬫槸涓€浜涚ず渚嬶細(1)鎮ㄥ彲浠ュ畨瑁呭苟杩愯Python宸ュ叿锛欯nox.sessiondeftests(session):session.install("pytest")session.run("pytest")(2)濡傛灉鎮ㄦ兂鎻愪緵涓€涓猵rogram瑕佷紶閫掓洿澶氬弬鏁帮紝鍙渶娣诲姞鏇村鍙傛暟鍗冲彲杩愯锛欯nox.sessiondeftests(session):session.install("pytest")session.run("pytest","-v","tests")(3)涔熷彲浠ヤ紶鐜鍙橀噺锛欯nox.sessiondeftests(session):session.install("black")session.run("pytest",env={"FLASK_DEBUG":"1"})鍏充簬杩愯瑙乶ox.sessions.Session.run()浠ヨ幏寰楁洿澶氶€夐」鍜岀▼搴忕ず渚嬨€傞€夋嫨瑕佽繍琛岀殑浼氳瘽涓€鏃︽偍鐨凬oxfile涓湁澶氫釜浼氳瘽锛屾偍浼氭敞鎰忓埌Nox灏嗛粯璁よ繍琛屾墍鏈夎繖浜涗細璇濄€傝櫧鐒惰繖寰堟湁鐢紝浣嗘偍閫氬父涓€娆″彧闇€瑕佽繍琛屼竴涓や釜銆傛偍鍙互浣跨敤--sessions鍙傛暟锛堟垨-s锛夋潵閫夋嫨瑕佽繍琛岀殑浼氳瘽銆傛偍鍙互浣跨敤--list鍙傛暟鏉ユ樉绀哄摢浜涗細璇濆彲鐢ㄤ互鍙婂摢浜涘皢瑕佽繍琛屻€備互涓嬫槸涓€浜涚ず渚嬶細杩欐槸涓€涓寘鍚笁涓細璇濈殑Noxfile锛歩mportnox@nox.sessiondeftest(session):...@nox.sessiondeflint(session):...@nox.sessiondefdocs(session):...濡傛灉浣犲彧鏄繍琛宯ox--list锛屼綘浼氱湅鍒版墍鏈変細璇濋兘琚€変腑锛氬湪noxfile.py:*test*lint*docssession涓畾涔夌殑浼氳瘽琚€変腑锛屾爣鏈?鐨勪細璇濊璺宠繃銆傚鏋滀綘杩愯nox--list--sessionslint锛孨ox灏嗗彧杩愯lint浼氳瘽锛歯ox>Runningsessionlintnox>Creatingvirtualenvusingpython3in.nox/lintnox>...nox>Sessionlint鎴愬姛銆傛洿澶氶€夐」鍜岃繍琛屽璇濇柟娉曪紒鎮ㄥ彲浠ュ湪鍛戒护琛岀敤娉曚腑闃呰鏈夊叧璋冪敤Nox鐨勬洿澶氫俊鎭€傞拡瀵瑰涓狿ython杩涜娴嬭瘯璁稿椤圭洰闇€瑕佹敮鎸佺壒瀹氱殑Python鐗堟湰鎴栧涓狿ython鐗堟湰銆傛偍鍙互閫氳繃涓篅nox.session鎸囧畾Python璁㎞ox閽堝澶氫釜瑙i噴鍣ㄨ繍琛屼細璇濄€備互涓嬫槸涓€浜涚ず渚嬶細(1)濡傛灉鎮ㄥ笇鏈涗細璇濅粎閽堝鍗曚釜鐗堟湰鐨凱ython杩愯锛欯nox.session(python="3.7")deftest(session):...(2)濡傛灉鎮ㄥ笇鏈涢拡瀵瑰崟涓増鏈殑Python杩愯鐨勪細璇濆湪澶氫釜鐗堟湰涓婅繍琛岋細@nox.session(python=["2.7","3.5","3.7"])deftest(session):...浣犱細娉ㄦ剰鍒拌繍琛宯ox--list灏嗘樉绀烘浼氳瘽鎵╁睍涓轰笁涓笉鍚岀殑浼氳瘽锛氬湪noxfile.py涓畾涔夌殑浼氳瘽锛?test-2.7*test-3.5*test-3.7鎮ㄥ彲浠ヤ娇鐢╪ox--sessionstest杩愯鎵€鏈夋祴璇曚細璇濇垨浣跨敤鏄剧ず鐨勫叏鍚嶅湪鍒楄〃涓繍琛屽崟涓祴璇曚細璇濓紝渚嬪锛宯ox--sessionstest-3.5銆傛湁鍏抽€夋嫨浼氳瘽鐨勬洿澶氳缁嗕俊鎭紝璇峰弬闃呭懡浠よ浣跨敤鏂囨。銆傛偍鍙互鍦ㄤ細璇濈殑virtualenv閰嶇疆涓槄璇绘湁鍏抽厤缃細璇濅娇鐢ㄧ殑铏氭嫙鐜鐨勬洿澶氫俊鎭€備娇鐢╟onda娴嬭瘯鏌愪簺椤圭洰锛岀壒鍒槸鍦ㄦ暟鎹瀛︾ぞ鍖轰腑锛岄渶瑕佹祴璇曞畠浠湪conda鐜涓殑浣跨敤銆傚鏋滄兂璁﹕ession鍦╟onda鐜涓嬭繍琛岋細@nox.session(venv_backend="conda")deftest(session):...鐢╟onda瀹夎鍖咃細session.conda_install("pytest")鍙互瀹夎鍖呬娇鐢╬ip杩涘叆conda鐜锛屼絾鏈€浣冲仛娉曟槸浠呬娇鐢?-no-deps閫夐」瀹夎銆傝繖鍙互闃叉pip瀹夎鐨勫寘涓巆onda瀹夎鐨勫寘涓嶅吋瀹癸紝骞堕槻姝ip鐮村潖conda鐜銆俿ession.install("contexter","--no-deps")session.install("-e",".","--no-deps")鍍廚ox涓€鏍峰弬鏁板寲鍙互鎺у埗杩愯澶氫釜瑙i噴鍣紝涔熷彲浠ヤ娇鐢╪ox.parametrize()瑁呴グ鍣ㄦ潵澶勭悊鍏锋湁涓€绯诲垪涓嶅悓鍙傛暟鐨勪細璇濄€傝繖鏄竴涓畝鐭殑渚嬪瓙锛屼娇鐢ㄥ弬鏁板寲鏉ユ祴璇旸jango鐨勪袱涓笉鍚岀増鏈細@nox.session@nox.parametrize("django",["1.9","2.0"])deftest(session,django):session.install(f"django=={django}")session.run("pytest")濡傛灉浣犺繍琛宯ox--list锛屼綘浼氱湅鍒癗ox灏嗕竴涓細璇濇墿灞曚负澶氫釜浼氳瘽銆傛瘡涓細璇濋兘浼氬緱鍒颁竴涓綘鎯充紶閫掔粰瀹冪殑鍙傛暟鍊硷細Sessionsdefinedinnoxfile.py:*test(django='1.9')*test(django='2.0')interfaceandusageofnox.parametrize()specifically绫讳技浜巔ytest鐨勫弬鏁板寲銆傝繖鏄疦ox鐨勪竴涓潪甯稿己澶х殑鍔熻兘銆傛偍鍙互鍦ㄥ弬鏁板寲浼氳瘽涓€氳繃绀轰緥闃呰鏈夊叧鍙傛暟鍖栫殑鏇村淇℃伅銆傦紙璇戞敞锛氬叧浜巔ytest绛変富娴佹祴璇曟鏋跺浣曚娇鐢ㄥ弬鏁板寲鍑芥暟锛熻鍙傝€冦€奝ython 涓浣曞疄鐜板弬鏁板寲娴嬭瘯锛熴€嬶級鎺ヤ笅鏉ョ湅浣狅紒鎮ㄧ幇鍦ㄥ熀鏈笂鏄竴鍚峃ox涓撳锛佲湪姝ゆ椂锛屾偍杩樺彲浠ワ細闃呰鏇村鏂囨。锛屼緥濡傚懡浠よ鐢ㄦ硶鍜岄厤缃?API銆傝缁欐垜浠弽棣堟垨璐$尞锛岃鍙傞槄璐$尞銆傜帺寰楀紑蹇冿紒馃挏鐩稿叧閾炬帴锛歔1]nox鏁欑▼锛歨ttps://nox.thea.codes/en/sta...[2]pip锛歨ttps://pip.readthedocs.org/[3]鐢ㄦ埛绔欑偣锛歨ttps://packaging.python.org/...[4]pipx:https://packaging.python.org/...[5]鐮佸ご宸ヤ汉锛歨ttps://www.docker.com/[6]thekevjames/nox鍥剧墖锛歨ttps://hub.docker.com/r/thek...[7]鍦℅itHubActions涓細https://github.com/features/a...[8]Activatedleigh/setup-nox鍔ㄤ綔锛歨ttps://github.com/marketplac...[9]flake8锛歨ttp://flake8.pycqa.org/en/la...[10]鍛戒护琛岀敤娉曪細https://nox.thea.codes/en/sta...[11]閰嶇疆&API锛歨ttps://nox.thea.codes/en/sta...[12]nox.sessions.Session.run():https://nox.thea.codes/en/sta...[13]浼氳瘽鐨刅irtualenv閰嶇疆锛歨ttps://nox.thea.codes/en/sta...[14]nox.parametrize():https://nox.thea.codes/en/sta...[15]pytest鐨勫弬鏁板寲锛歨ttps://pytest.org/latest/par...[16]Parametrizesession:https://nox.thea.codes/en/sta...[17]鎶曠锛歨ttps://nox.thea.codes/en/sta...鍏紬鍙枫€怭ython鐚€戯紝鏈彿杩炶浇绯诲垪绮惧搧鏂囩珷锛屽寘鎷柕鏄熷摬瀛︾尗绯诲垪銆丳ython杩涢樁绯诲垪銆佸ソ涔︽帹鑽愮郴鍒椼€佹妧鏈啓浣溿€佷紭璐ㄨ嫳鏂囨帹鑽愪笌缈昏瘧绛夛紝娆㈣繋鍏虫敞銆?/p>