pythonåå¿è ð°_ããããªãã£ãããšãŸãšã
Python ã®ä»®æ³ç°å¢ããããããããŸãšããŠã¿ã
æè¿ããŒã¿ãµã€ãšã³ã¹ãæ©æ¢°åŠç¿ã«èå³ãæã£ãŠ Python ãå§ããŸããã
ãä»®æ³ç°å¢ã£ãŠã©ãããŠäœãå¿
èŠãããã®ïŒããšããçåã解æ¶ããããã®ã¡ã¢ã§ãã
以äžã®ã¹ã©ã€ããªã©ãåèã«ããŠããŸãã
- Pythonã®ä»®æ³ç°å¢ãå®å šã«ç解ãã(ãããããªã) [speakerdeck]
- Python ããã±ãŒãžç®¡çããŒã« venv ã®äœ¿ãæ¹ [Qiita]
1. ããããä»®æ³ç°å¢ã£ãŠãªã«ïŒãªãã§äœãã®ïŒ
ä»®æ³ç°å¢ (venv) ã¯ããããžã§ã¯ãããšã«å¥ã
ã® Python ç°å¢ãäœãããã®ä»çµã¿ã§ãã
ã©ãããŠå¥ã
ã«ããå¿
èŠãããããšãããšãããããžã§ã¯ãããšã«ã©ã€ãã©ãªã®ããŒãžã§ã³ãç°ãªããã±ãŒã¹ãããããããã§ãã
- äŸ: ãããžã§ã¯ã A ã§ã¯ Pandas v1.3 ã䜿ã£ãŠãã
- äŸ: ãããžã§ã¯ã B ã§ã¯ Pandas v2.0 ã䜿ããã
ããä»®æ³ç°å¢ãäœããã« pip
ã§ããã±ãŒãžãã€ã³ã¹ããŒã«ãããšãOSå
šäœïŒã·ã¹ãã å
šäœïŒã® Python ç°å¢ïŒã°ããŒãã«ç°å¢ïŒã«è¿œå ãããŠããŸããŸãããããšããããžã§ã¯ãã«ãã£ãŠå¿
èŠãªã©ã€ãã©ãªã®ããŒãžã§ã³ãè¡çªããŠããŸãããšãå€ã
ãããŸãã
ããã§ãä»®æ³ç°å¢ (venv) ããããžã§ã¯ãããšã«äœæããŠãã©ã€ãã©ãªã®ã€ã³ã¹ããŒã«å ãåããããšã§ãããŒãžã§ã³ç«¶åãé¿ããããšãã§ããŸãã
ã°ããŒãã«ç°å¢ãšã¯ïŒ
ã°ããŒãã«ç°å¢ ïŒ OS ã«ã€ã³ã¹ããŒã«ãããŠããå ±éã® Python å®è¡ç°å¢
ããšãã°ãä»®æ³ç°å¢ãäœæããã« pip install ããã±ãŒãžå
ãå®è¡ãããšã
/usr/lib/python3.x/site-packages/
ãªã© ã·ã¹ãã å
±é (ã°ããŒãã«) ãªãã£ã¬ã¯ããªãžã€ã³ã¹ããŒã«ãããŠããŸããŸãã
çµæãä»ã®ãããžã§ã¯ãã§ããã®ããã±ãŒãžãåç
§ãããããŒãžã§ã³ãé£ãéã£ãŠãšã©ãŒâŠãšãã£ãäºæ
ãèµ·ããããããªããŸãã
2. venv ã®åºæ¬çãªäœ¿ãæ¹
Python 3.3 以éã§ã¯ãæšæºã©ã€ãã©ãªãšã㊠venv
ãå梱ãããŠãããããè¿œå ã€ã³ã¹ããŒã«äžèŠã§äœ¿ããŸãã
ä»®æ³ç°å¢ã®äœæ
# ä»»æã®ãã©ã«ãã§
python -m venv myenv
-
myenv
ãšããååã®ãã©ã«ããäœæããããã®äžã«ä»®æ³ç°å¢ãé 眮ãããŸãã
ä»®æ³ç°å¢ã®æå¹å
- macOS / Linux:
. myenv/bin/activate
- Windows:
.\myenv\Scripts\activate
æå¹åãããšãã¿ãŒããã«ã®å
é ã« (myenv)
ã®ãããªè¡šç€ºãå ããããã®ç¶æ
㧠pip install
ããããã±ãŒãžã¯ myenv
å
ã®ãã£ã¬ã¯ããªã«ã€ã³ã¹ããŒã«ãããŸãã
3. ããã±ãŒãžãšã©ã€ãã©ãªã®éãã¯äœïŒ
ããæ··åãããã¡ã§ãããäžå¿ãã£ãããšãã䜿ãåãã¯ä»¥äžã®ãšããã§ãã
-
ããã±ãŒãž (package)
- Python ã«ãããŠ
__init__.py
ãå«ããã£ã¬ã¯ã㪠- è€æ°ã®
.py
ãã¡ã€ã«ïŒïŒã¢ãžã¥ãŒã«ïŒããŸãšããæ§é
- Python ã«ãããŠ
-
ã©ã€ãã©ãª (library)
- ããæ©èœãæäŸããã³ãŒã矀ããŸãšããåŒç§°ïŒããåºãæŠå¿µïŒ
- å°èŠæš¡ã ãšåäžããã±ãŒãžã§ããã©ã€ãã©ãªããšåŒã¶ããšããã
- 倧èŠæš¡ã ãšè€æ°ã®ãµãããã±ãŒãžãæããŠãã©ã€ãã©ãªããšãªã
NumPy ã®äŸ
NumPy ã¯ãæ°å€èšç®ã©ã€ãã©ãªããšåŒã°ããŸãããå®éã«ã¯ numpy/
ãã£ã¬ã¯ããªä»¥äžã« core
, fft
, linalg
, random
ãªã©å€æ°ã®ãµãããã±ãŒãžãæã£ãŠããŸãã
numpy/
âââ __init__.py
âââ core/
â âââ __init__.py
â âââ ...
âââ fft/
â âââ __init__.py
â âââ ...
âââ linalg/
â âââ __init__.py
â âââ ...
âââ random/
â âââ __init__.py
â âââ ...
âââ ...
-
numpy/
ãåãµããã£ã¬ã¯ããªã«__init__.py
ãããããšã§ãPython ã«ãããã¯ããã±ãŒãžã§ããããšæãã圹å²ãæãããŠããŸãã - ã©ã€ãã©ãªãšããåŒç§°ã¯ãæ°å€èšç®ãå€æ¬¡å é åã®æ©èœããŸãšãããã®ããšãã倧ããªå¡ã瀺ããããåºãæŠå¿µã§ãã
4. init.py ã®åœ¹å²
-
ããã±ãŒãžãšèªèãããâç®å°â
ãã£ã¬ã¯ããªã«__init__.py
ããããšãPython ã¯ããããããã±ãŒãžããšããŠæ±ããŸãã -
åæåã³ãŒãã®é çœ®å Žæ
ããã±ãŒãžãimport
ãããã¿ã€ãã³ã°ã§ããã®__init__.py
ãå®è¡ãããŸãã
ãã®ãããããŒãžã§ã³æ å ±ã®å®çŸ©ããå¿ èŠãªå€æ°ãäºåã«èªã¿èŸŒãã§ãããšãã£ãåæååŠçãå ¥ããããšãå¯èœã§ãã
5. requirements.txt ãš lock ãã¡ã€ã«
è€æ°äººã§éçºããããç°å¢ãåçŸããããããšãã«éèŠãªã®ã ããã±ãŒãžã®ããŒãžã§ã³ç®¡ç ã§ãã
5-1. requirements.txt
pip freeze > requirements.txt
- çŸåšã€ã³ã¹ããŒã«ãããŠããããã±ãŒãžãšããŒãžã§ã³ã
requirements.txt
ã«æžãåºããŸãã - å¥ã®ç°å¢ã§åãããŒãžã§ã³ãã€ã³ã¹ããŒã«ãããå Žåã¯ãšããã° OKã
pip install -r requirements.txt
5-2. lock ãã¡ã€ã«
requirements.txt
ã¯æäœæ¥ã§ç·šéããããšãã§ããŸãããäŸåããã±ãŒãžãŸã§å«ããŠå³å¯ã«ããŒãžã§ã³åºå®ãããå Žåã¯ãããã« âlock ãã¡ã€ã«â ã䜿ãããšããããŸãã
# äŸ: çŸåšã®ç°å¢ã®ããã±ãŒãžã lock ãã¡ã€ã«ã«èœãšã蟌ã
pip freeze > requirements.lock
-
requirements.lock
ã䜿ãããšã§ãã€ã³ã¹ããŒã«æç¹ã®ããã¹ãŠã®äŸåããã±ãŒãžå«ãããŒãžã§ã³äžèŠ§ããåºå®ã§ããŸãã - ä»ã®éçºè ãåãããã¯ãã¡ã€ã«ã䜿ãã°ããŸã£ããåãããŒãžã§ã³æ§æã§ç°å¢ãåçŸã§ããŸãã
6. Pipenv ã PoetryãRye ã®è©±
venv + pip
ã ãã§ããããžã§ã¯ãããšã«åé¢ãããç°å¢ç®¡çã¯å¯èœã§ããã以äžã®ãã㪠ããã±ãŒãžç®¡çããŒã« ã䜿ããšãããã«äŸ¿å©ã«ãªããŸãã
- Pipenv
- Poetry
- Rye
ãããã¯ãrequirements.txt
ã lock ãã¡ã€ã«ã®ç®¡çãèªååããããä»®æ³ç°å¢ã®äœæã»åãæ¿ããåçŽåããŠãããŸãã
ååŠè
ã®ãã¡ã¯ããŸã venv
ã«æ
£ããŠãããšè¯ãã§ãããããŒã éçºãé·æéçšã«ãªã£ãŠãããšãPipenvã»Poetryã»Rye ã®å°å
¥ãæ€èšãããŸãã
7. äœè«: pyproject.toml ã£ãŠäœïŒ
pyproject.toml
ã¯ãPython ããã±ãŒãžã®ãã«ããäŸåé¢ä¿ãèšè¿°ããããã®æ°ããæšæºãã¡ã€ã«ã§ãã
Poetry ãªã©ã§ã¯ããã®ãã¡ã€ã«ã«äŸåããã±ãŒãžãã¹ã¯ãªããã®ãšã³ããªãã€ã³ããªã©ããŸãšããŠæžãããšã§ããããžã§ã¯ãã®ã¡ã¿ããŒã¿ãäžå
管çããŸãã
ä»åŸã® Python ãšã³ã·ã¹ãã ã§ã¯ããã®ãã¡ã€ã«ã軞ã«ããéçºãããŒãäž»æµã«ãªãã€ã€ãããŸãã
ãŸãšã
- ä»®æ³ç°å¢ (venv) ã䜿ããšããããžã§ã¯ãããšã«ç¬ç«ãã Python ç°å¢ãäœããŠäŸ¿å©ã
-
ããã±ãŒãž vs. ã©ã€ãã©ãª
- ããã±ãŒãž =
__init__.py
ãå«ããã£ã¬ã¯ããªæ§é - ã©ã€ãã©ãª = æ©èœã®ãŸãšãŸããæãåºãåŒç§°
- ããã±ãŒãž =
- requirements.txt ãš lock ãã¡ã€ã« ã䜿ãã°ãäŸåé¢ä¿ã®åçŸæ§ãäžããã
- ãã䟿å©ãªããŒã« (Pipenv, Poetry, Rye) ã䜿ããšç°å¢ç®¡çãããã±ãŒãžç®¡çãããã«æ¥œã«ãªãã
-
pyproject.toml
ã¯æ°ããæšæºãšããŠãäŸåé¢ä¿ãã¡ã¿ããŒã¿ãäžå 管çããããã®ãã¡ã€ã«ã
åèãªã³ã¯
- Pythonã®ä»®æ³ç°å¢ãå®å šã«ç解ãã(ãããããªã) [speakerdeck]
- Python ããã±ãŒãžç®¡çããŒã« venv ã®äœ¿ãæ¹ [Qiita]
- Pythonããã±ãŒãžç®¡çããŒã«ãŸãšã2023 (Poetry, Pipenv, etc.) [Zenn]
ãŸã㯠venv
ã«ããä»®æ³ç°å¢ãç¿åŸããrequirements.txt
ã requirements.lock
ã®äœãæ¹ãèŠããã°ããããžã§ã¯ãã®ç°å¢æ§ç¯ã§å°ãããšã¯ã ãã¶æžãã¯ãã§ãã
æ
£ããŠããããPoetry ã Rye ãªã©ãè©ŠããŠã¿ããšè¯ãã§ãããã
Discussion