ã¯ããã«
Gunosy Tech Lab - Media ML ã®suchidaã§ãã
æè¿ã¯Pythonã®åã¢ããã¼ã·ã§ã³ããªãã¨ãããµããã人çã§ãã
ãã¡ãã®è¨äºã¯ Gunosy Advent Calendar 2021ã®3æ¥ç®ã®è¨äºã§ãã
ååã®è¨äºã¯
id:skozawa ããã®æ½çã®åªå
é ä½ä»ãã®ããã«åæDayã宿½ãã¾ããã§ããã
ãã¦çãããPythonãå©ç¨ããéã«éçè§£æãã¼ã«ãå©ç¨ãã¦ãã¾ããï¼ããã¯ãã³ã¼ãã綺éºã«ä¿ã¡ãä¿å®éç¨ãè¡ããããããããã«é常ã«éè¦ãªãã¼ã«ã§ãã æ¬è¨äºã§ã¯ãPythonã³ã¼ããã©ã¼ããã¿ã¼ãªã©ã®éçè§£æãã¼ã«ã¨ãã®è¨å®ãã¡ã¤ã«ã®ç®¡çæ¹æ³ã«ã¤ãã¦ç°¡åã«ç´¹ä»ãã¾ãã
éçè§£æãã¼ã«ã®å°å ¥
ãã¼ã å ã§ã¯ä¸»ã«ãã¢ã«ã´ãªãºã ã®éçºã»éç¨ã«Pythonãå©ç¨ãã¦ãã¾ãã ã¾ããã³ã¼ãã綺éºã«ä¿ã¡ãä¿å®éç¨ãè¡ããããããããã«ã³ã¼ããã©ã¼ããã¿ã¼ãªã©ã®éçè§£æãã¼ã«ãå°å ¥ãã¦ãã¾ãã ãªãã§ãã以ä¸ã«æãããã¼ã«ãããå©ç¨ããã¦ãã¾ãã
- flake8: ææ³ãã§ãã¯ãè¡ããã¼ã«
- black: ã½ã¼ã¹ã³ã¼ããèªåã§æ´å½¢ãããã¼ã«
- isort: importæãèªåã§æ´é ãããã¼ã«
- mypy: åã¢ããã¼ã·ã§ã³ããã¨ã«åãã§ãã¯ãè¡ããã¼ã«
- pytest: ãã¹ãã³ã¼ããæ¤è¨¼ãããã¼ã«
ã¾ããããã±ã¼ã¸ç®¡çã«ã¯Poetryãããå©ç¨ããã¦ããã®ã§ãPoetryåæã§è©±ãã¾ããã以ä¸ã®ã³ãã³ãã§åãã¼ã«ãã¤ã³ã¹ãã¼ã«ãããã¨ãã§ãã¾ãã
poetry add -D flake8 black isort mypy pytest
ã¾ããåãã¼ã«ã®è¨å®ãã«ã¹ã¿ãã¤ãºããå ´åã¯ãã³ãã³ãã®ãªãã·ã§ã³å¼æ°ã«è¨è¿°ããããè¨å®ãã¡ã¤ã«ã追å ããå¿ è¦ãããã¾ãã ä¾ãã°ãflake8ã®è¨å®ãã¡ã¤ã«ã§ããã°ã.flake8ãsetup.cfgã¨ãã£ãååã®ãã¡ã¤ã«ã«ä»¥ä¸ã®ãããªè¨å®ã追å ããäºã§ãªãã·ã§ã³ãã«ã¹ã¿ãã¤ãºãããã¨ãã§ãã¾ãã
[flake8] max-line-length = 120 max-complexity = 18 ignore = E203, E266, W503
é話ä¼é¡
ã¡ãªã¿ã«ãç§ã社å ã§è¦ã¦ãããªãã·ã§ã³è¨å®ã®æ¸ãæ¹ã¯ä»¥ä¸ã®ãããªå¤é·ã辿ã£ã¦ãããã¨æãã¾ãï¼ãã¶ãï¼ã
- ã³ãã³ãã®å¼æ°ã«ç´æ¥ãªãã·ã§ã³ã渡ãæä»£ï¼ãããREADMEã«ãã¿æ¸ãããï¼
- Makefileã«ãªãã·ã§ã³ä»ãã®ã³ãã³ããã¾ã¨ãã¦ããæä»£
- åãªãã·ã§ã³ãè¨è¿°ããè¨å®ãã¡ã¤ã«ãç½®ãæä»£
- ãªãã¹ãsetup.cfgã«ã¾ã¨ããæä»£
1,2ã®æ¹æ³ã§ä¸ä¾¿ãªã®ã¯ãVSCodeãªã©ã®ã¨ãã£ã¿ã¼ã®èªåãã©ã¼ããããªã©ã®è¨å®ã«ã¬ãã¸ããªãã¨ã®è¨å®ãåæ ã§ããªãç¹ã§ãã 3,4ã®æ¹æ³ãæªããªãã§ãããå人çã«ã«ã¼ããã£ã¬ã¯ããªã®ãã¡ã¤ã«æ°ã¯æ¸ãããããæ°æã¡ãããã¾ããç¹ã«3ã®æ¹æ³ã ã¨ãåè¿°ãã5ã¤ã®ãã¼ã«ã®è¨å®ãå¿ è¦ã§ããã°5ã¤ã®ãã¡ã¤ã«ãå¿ è¦ã«ãªãããããã«ç´ãã¦éè¦åº¦ã®é«ããã¡ã¤ã«ãè¦ã¤ãã¥ãããªãã¾ãã
ä»åç´¹ä»ããã®ã¯ããªãã·ã§ã³è¨å®ãpyproject.tomlã«ã¾ã¨ããæ¹æ³ã§ã*1ã
ãã®è¨å®ãpyproject.tomlã«å ¨é¨æ¸ãã¾ã
åç¯ã«æãããã¼ã«ã®è¨å®ã¯ã以ä¸ã®ããã«pyproject.tomlã«ãã¹ã¦è¨è¿°ãããã¨ãã§ãã¾ãã
[tool.poetry] name = "example" version = "0.1.0" description = "" authors = ["Your Name <[email protected]>"] [tool.poetry.dependencies] python = "^3.9" [tool.poetry.dev-dependencies] black = "^21.11b1" isort = "^5.10.1" pyproject-flake8 = "^0.0.1-alpha.2" mypy = "^0.910" pytest = "^5.2" [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" [tool.black] target-version = ['py39'] line-length = 120 [tool.isort] line_length = 120 multi_line_output = 3 include_trailing_comma = true known_local_folder=['config',] [tool.flake8] max-line-length = 120 max-complexity = 18 ignore = "E203,E266,W503," [tool.mypy] python_version = "3.9" no_strict_optional = true ignore_missing_imports = true check_untyped_defs = true [tool.pytest.ini_options] testpaths = ["tests",] filterwarnings = ["ignore::DeprecationWarning",]
å³å¯ã«ã¯ãç¾ç¶flake8ãpyproject.tomlã«å¯¾å¿ãã¦ããªã(issue)ã®ã§ããã®ã©ããã¼ãã¼ã«ã§ããpyproject-flake8ã«ç½®ãæãã¦ã¤ã³ã¹ãã¼ã«ãã¦ãã¾ããï¼flake8ãèµ°ãããéã¯ãpflake8ã§å®è¡ãã¾ããï¼
mypyã¯æ¯è¼çæè¿å¯¾å¿ãããããã§ã(issue)ã
ã¾ãã以ä¸ã®ãããªMakefileãè¨è¿°ãã¦ããã°ã䏿¬ã§ã³ãã³ããå®è¡ãããã¨ãå¯è½ãªã®ã§ãããããã§ãã
.PHONY: tests
tests: ## run tests with poetry
poetry run isort .
poetry run black .
poetry run pflake8 .
poetry run mypy .
poetry run pytest
ã¾ãVSCodeã®å ´åã¯ãä¿åæã«èªåã§ãã©ã¼ããã¿ã¼ãªã©ãå®è¡ãããã¨ãã§ããã®ã§ãããå¬ãããã¨ã«ãpyproject.tomlã®ä¸ã®è¨å®ãåæã«åç
§ãã¦å®è¡ãã¦ããã¾ããblack, isort, mypyã«ã¤ãã¦ã¯æå
ã§ç¢ºèªãã¨ãã¾ãããflake8ã«ã¤ãã¦ãpflake8ã¨ã®é£æºãã§ããããã§ãããblackã§æ¦ã対å¿ã§ããã®ã§ãã¹ã«ã¼ãã¦ãã¾ãã
ãã ããVSCodeå´ã§ä»¥ä¸ã®ããã«ãªãã·ã§ã³è¨å®ãè¨è¿°ãã¦ãã¾ã£ã¦ããã¨ã以ä¸ã§ä¸æ¸ãããã¦ãã¾ãæå³ããæåã«ãªããªãã®ã§æ³¨æã§ãã
"python.formatting.blackArgs": [
"--line-length=80"
],
ã¾ãæè¿ç¥ã£ãã®ã§ãããpysenã¨ãã°ããisort, black, flake8, mypyã䏿¬è¨å®ã§ãããã¼ã«ãåå¨ãã¦ãããå°å ¥ããã®ãããããããã¾ããã github.com
ãããã«
æ¬è¨äºã§ã¯ãéçè§£æãã¼ã«ã®ç´¹ä»ã¨ãã®è¨å®ãã¡ã¤ã«ã®ç®¡çæ¹æ³ã«ã¤ãã¦ç°¡åã«ã¾ã¨ãã¾ããã ä¸ã¤ã§ãåèã«ãªãç¹ãããã°å¹¸ãã§ããå人çã«ã¯ãVSCodeã¨èªåã§é£æºãåããç¹ããã¤ãã¹ãã§ãç¬ã
次åã¯mocyutoããã®Apach Hudiãªè©±ã§ãããæ¥½ãã¿ã«!!
*1:2çªç ãæã¯ã容赦ä¸ããmm