28 KiB
ä»®æ³ç°å¢
Pythonãããžã§ã¯ãã®äœæ¥ã§ã¯ãä»®æ³ç°å¢ïŒãŸãã¯é¡äŒŒã®ä»çµã¿ïŒã䜿çšãããããžã§ã¯ãããšã«ã€ã³ã¹ããŒã«ããããã±ãŒãžãåé¢ããã¹ãã§ãããã
/// info | æ å ±
ãããä»®æ³ç°å¢ã®æŠèŠãäœææ¹æ³ãäœ¿çšæ¹æ³ã«ã€ããŠæ¢ã«ãåç¥ãªãããã®ã»ã¯ã·ã§ã³ãã¹ãããããããšãã§ããŸããð€
///
/// tip | è±ç¥è
ä»®æ³ç°å¢ã¯ãç°å¢å€æ°ãšã¯ç°ãªããŸãã
ç°å¢å€æ°ã¯ãããã°ã©ã ã䜿çšã§ããã·ã¹ãã å ã®å€æ°ã§ãã
ä»®æ³ç°å¢ã¯ããã¡ã€ã«ããŸãšãããã£ã¬ã¯ããªã®ããšã§ãã
///
/// info | æ å ± ãã®ããŒãžã§ã¯ãä»®æ³ç°å¢ã®äœ¿ç𿹿³ãšããã®ã¯ãããã«ã€ããŠèª¬æããŸãã
ãããã¹ãŠã管çããããŒã«ïŒPythonã®ã€ã³ã¹ããŒã«ãå«ãïŒãå°å ¥ããæºåãã§ããŠãããªããuv ãã詊ããã ããã
///
ãããžã§ã¯ãã®äœæ
ãŸãããããžã§ã¯ãçšã®ãã£ã¬ã¯ããªãäœæããŸãã
ç§ã¯éåžž home/user ãã£ã¬ã¯ããªã®äžã« code ãšãããã£ã¬ã¯ããªãçšæããŠããŠããããžã§ã¯ãããšã«1ã€ã®ãã£ã¬ã¯ããªããã®äžã«äœæããŠããŸãã
// Go to the home directory
$ cd
// Create a directory for all your code projects
$ mkdir code
// Enter into that code directory
$ cd code
// Create a directory for this project
$ mkdir awesome-project
// Enter into that project directory
$ cd awesome-project
ä»®æ³ç°å¢ã®äœæ
Pythonãããžã§ã¯ãã§ã®åããŠã®äœæ¥ãéå§ããéã«ã¯ã**ãããžã§ã¯ãå **ã«ä»®æ³ç°å¢ãäœæããŠãã ããã
/// tip | è±ç¥è
ãããè¡ãã®ã¯ããããžã§ã¯ãããšã«1åã ãã§ããäœæ¥ã®ãã³ã«è¡ãå¿ èŠã¯ãããŸããã
///
//// tab | venv
ä»®æ³ç°å¢ãäœæããã«ã¯ãPythonã«ä»å±ããŠãã venv ã¢ãžã¥ãŒã«ã䜿çšã§ããŸãã
$ python -m venv .venv
/// details | ãã®ã³ãã³ãã®æå³
python:pythonãšããããã°ã©ã ãåŒã³åºããŸã-m: ã¢ãžã¥ãŒã«ãã¹ã¯ãªãããšããŠåŒã³åºããŸããã©ã®ã¢ãžã¥ãŒã«ãåŒã³åºãã®ãããã®æ¬¡ã«æå®ããŸãvenv: éåžžPythonã«ä»éããŠã€ã³ã¹ããŒã«ãããvenvã¢ãžã¥ãŒã«ã䜿çšããŸã.venv: ä»®æ³ç°å¢ã.venvãšããæ°ãããã£ã¬ã¯ããªã«äœæããŸã
///
////
//// tab | uv
ãã uv ãã€ã³ã¹ããŒã«æžã¿ãªããä»®æ³ç°å¢ãäœæããããã« uv ã䜿ãããšãã§ããŸãã
$ uv venv
/// tip | è±ç¥è
ããã©ã«ãã§ã¯ã uv 㯠.venv ãšãããã£ã¬ã¯ããªã«ä»®æ³ç°å¢ãäœæããŸãã
ãã ãã远å ã®åŒæ°ã«ãã£ã¬ã¯ããªåãäžããŠã«ã¹ã¿ãã€ãºããããšãã§ããŸãã
///
////
ãã®ã³ãã³ã㯠.venv ãšãããã£ã¬ã¯ããªã«æ°ããä»®æ³ç°å¢ãäœæããŸãã
/// details | .venv ãŸãã¯ãã®ä»ã®åå
ä»®æ³ç°å¢ãå¥ã®ãã£ã¬ã¯ããªã«äœæããããšãå¯èœã§ããã .venv ãšåä»ããã®ãäžè¬çãªæ
£ç¿ã§ãã
///
ä»®æ³ç°å¢ã®æå¹å
å®è¡ãããPythonã³ãã³ããã€ã³ã¹ããŒã«ãããããã±ãŒãžãæ°ããäœæããä»®æ³ç°å¢ã䜿çšããããããã®ä»®æ³ç°å¢ãæå¹åããŸãããã
/// tip | è±ç¥è
ãã®ãããžã§ã¯ãã®äœæ¥ã§æ°ããã¿ãŒããã«ã»ãã·ã§ã³ãéå§ããéã«ã¯ãæ¯åæå¹åãå¿ èŠã§ãã
///
//// tab | Linux, macOS
$ source .venv/bin/activate
////
//// tab | Windows PowerShell
$ .venv\Scripts\Activate.ps1
////
//// tab | Windows Bash
ããWindowsã§Bashã䜿çšããŠããå Žå (Git Bashãªã©):
$ source .venv/Scripts/activate
////
/// tip | è±ç¥è
æ°ããããã±ãŒãžãä»®æ³ç°å¢ã«ã€ã³ã¹ããŒã«ãããšãã«ã¯ãå床æå¹åããŠãã ããã
ããããããšã§ããã®ããã±ãŒãžãã€ã³ã¹ããŒã«ããã¿ãŒããã«ïŒCLIïŒããã°ã©ã ã䜿çšããå Žåã«ãä»®æ³ç°å¢å ã®ãã®ã確å®ã«äœ¿ãããã°ããŒãã«ç°å¢ã«ã€ã³ã¹ããŒã«ãããŠããå¥ã®ãã®ïŒããããå¿ èŠãªãã®ãšã¯ç°ãªãããŒãžã§ã³ïŒã誀ã£ãŠäœ¿çšããããšãé²ããŸãã
///
ä»®æ³ç°å¢ãæå¹ã§ããããšã確èªãã
ä»®æ³ç°å¢ãæå¹ã§ããïŒåã®ã³ãã³ããæ£åžžã«æ©èœããïŒããšã確èªããŸãã
/// tip | è±ç¥è
ããã¯ä»»æã§ããããã¹ãŠãæåŸ éãã«æ©èœããæå³ããä»®æ³ç°å¢ã䜿çšããŠããããšã確èªããè¯ãæ¹æ³ã§ãã
///
//// tab | Linux, macOS, Windows Bash
$ which python
/home/user/code/awesome-project/.venv/bin/python
.venv/bin/python ã«ãã python ãã€ããªãããããžã§ã¯ãïŒãã®å Žå㯠awesome-project ïŒå
ã«è¡šç€ºãããŠããã°ãæ£åžžã«åäœããŠããŸã ðã
////
//// tab | Windows PowerShell
$ Get-Command python
C:\Users\user\code\awesome-project\.venv\Scripts\python
.venv\Scripts\python ã«ãã python ãã€ããªãããããžã§ã¯ãïŒãã®å Žå㯠awesome-project ïŒå
ã«è¡šç€ºãããŠããã°ãæ£åžžã«åäœããŠããŸã ðã
////
pip ãã¢ããã°ã¬ãŒããã
/// tip | è±ç¥è
ãã uv ã䜿çšããŠããå Žåã¯ã pip ã®ä»£ããã« uv ã䜿ã£ãŠã€ã³ã¹ããŒã«ãè¡ãããã pip ãã¢ããã°ã¬ãŒãããå¿
èŠã¯ãããŸãã ðã
///
ããããã±ãŒãžã®ã€ã³ã¹ããŒã«ã« pipïŒPythonã«æšæºã§ä»å±ããŠããŸãïŒã䜿çšããŠãããªãã pip ãææ°ããŒãžã§ã³ã«ã¢ããã°ã¬ãŒãããŸãããã
ããã±ãŒãžã®ã€ã³ã¹ããŒã«äžã«çºçããæ³å®å€ã®ãšã©ãŒã®å€ãã¯ãæåã« pip ãã¢ããã°ã¬ãŒãããŠããã ãã§è§£æ±ºãããŸãã
/// tip | è±ç¥è
éåžžãããã¯ä»®æ³ç°å¢ãäœæããçŽåŸã«äžåºŠã ãå®è¡ããŸãã
///
ä»®æ³ç°å¢ãæå¹ã§ããããšãïŒäžã§èª¬æããã³ãã³ãã§ïŒç¢ºèªããã¢ããã°ã¬ãŒããå®è¡ããŸãããïŒ
$ python -m pip install --upgrade pip
---> 100%
.gitignore ã远å ãã
Gitã䜿çšããŠããå ŽåïŒäœ¿çšããã¹ãã§ãããïŒã .gitignore ãã¡ã€ã«ã远å ããŠã .venv å
ã®ãããããã¡ã€ã«ãGitã®ç®¡ç察象ããé€å€ããŸãã
/// tip | è±ç¥è
ãã uv ã䜿çšããŠä»®æ³ç°å¢ãäœæããå Žåããã§ã«ãã®äœæ¥ã¯æžãã§ããã®ã§ããã®æé ãã¹ãããã§ããŸã ðã
///
/// tip | è±ç¥è
ããããä»®æ³ç°å¢ãäœæããçŽåŸã«äžåºŠã ãå®è¡ããŸãã
///
$ echo "*" > .venv/.gitignore
/// details | ãã®ã³ãã³ãã®æå³
echo "*": ã¿ãŒããã«ã«*ãšããããã¹ããã衚瀺ãããããšããŸããïŒæ¬¡ã®éšåã«ãã£ãŠãã®åäœãå°ãå€ãããŸãïŒ>:>ã®å·ŠåŽã®ã³ãã³ããã¿ãŒããã«ã«è¡šç€ºããããšããå 容ããã¿ãŒããã«ã«ã¯è¡šç€ºããã>ã®å³åŽã®ãã¡ã€ã«ã«æžã蟌ã¿ãŸãã.gitignore:*ãæžã蟌ããã¡ã€ã«åã
ããã§ãGitã«ããã * ã¯ããã¹ãŠããæå³ããã®ã§ããã®ã³ãã³ãã«ãã£ãŠ .venv ãã£ã¬ã¯ããªå
ã®ãã¹ãŠãGitã«ç¡èŠãããããã«ãªããŸãã
ãã®ã³ãã³ãã¯ä»¥äžã®ããã¹ããæã€ .gitignore ãã¡ã€ã«ãäœæããŸãïŒ
*
///
ããã±ãŒãžã®ã€ã³ã¹ããŒã«
ä»®æ³ç°å¢ãæå¹åããåŸããã®äžã§ããã±ãŒãžãã€ã³ã¹ããŒã«ã§ããŸãã
/// tip | è±ç¥è
ãããžã§ã¯ãã«å¿ èŠãªããã±ãŒãžãã€ã³ã¹ããŒã«ãŸãã¯ã¢ããã°ã¬ãŒãããå ŽåããããäžåºŠå®è¡ããŸãã
ããæ°ããããã±ãŒãžã远å ããããããŒãžã§ã³ãã¢ããã°ã¬ãŒãããå¿ èŠãããå Žåã¯ãããäžåºŠãã®æé ãç¹°ãè¿ããŸãã
///
ããã±ãŒãžãçŽæ¥ã€ã³ã¹ããŒã«ãã
æ¥ãã§ããŠããããžã§ã¯ãã®ããã±ãŒãžèŠä»¶ã宣èšãããã¡ã€ã«ã䜿ããããªãå Žåãããã±ãŒãžãçŽæ¥ã€ã³ã¹ããŒã«ã§ããŸãã
/// tip | è±ç¥è
ããã°ã©ã ãå¿
èŠãšããããã±ãŒãžãšããŒãžã§ã³ããã¡ã€ã«ïŒäŸãã° requirements.txt ã pyproject.toml ïŒã«èšèŒããŠããã®ã¯ãïŒãšãŠãïŒè¯ãèãã§ãã
///
//// tab | pip
$ pip install "fastapi[standard]"
---> 100%
////
//// tab | uv
ãã uv ã䜿çšã§ãããªã:
$ uv pip install "fastapi[standard]"
---> 100%
////
requirements.txt ããã€ã³ã¹ããŒã«ãã
ãã requirements.txt ããããªããããã±ãŒãžã®ã€ã³ã¹ããŒã«ã«äœ¿çšã§ããŸãã
//// tab | pip
$ pip install -r requirements.txt
---> 100%
////
//// tab | uv
ãã uv ã䜿çšã§ãããªã:
$ uv pip install -r requirements.txt
---> 100%
////
/// details | requirements.txt
ããã±ãŒãžãèšèŒããã requirements.txt ã¯ä»¥äžã®ããã«ãªã£ãŠããŸã:
fastapi[standard]==0.113.0
pydantic==2.8.0
///
ããã°ã©ã ãå®è¡ãã
ä»®æ³ç°å¢ãæå¹åããåŸãããã°ã©ã ãå®è¡ã§ããŸãããã®éãä»®æ³ç°å¢å ã®Pythonãšãããã«ã€ã³ã¹ããŒã«ããããã±ãŒãžã䜿çšãããŸãã
$ python main.py
Hello World
ãšãã£ã¿ã®èšå®
ãããžã§ã¯ãã§ã¯ãããããšãã£ã¿ã䜿çšããã§ããããã³ãŒãè£å®ãã€ã³ã©ã€ã³ãšã©ãŒã®è¡šç€ºãã§ããããã«ãäœæããä»®æ³ç°å¢ããšãã£ã¿ã§ã䜿ããããèšå®ããŠãã ãããïŒå€ãã®å Žåãèªåæ€åºãããŸãïŒ
èšå®äŸ:
/// tip | è±ç¥è
ãã®èšå®ã¯éåžžãä»®æ³ç°å¢ãäœæããéã«äžåºŠã ãè¡ããŸãã
///
ä»®æ³ç°å¢ã®ç¡å¹å
ãããžã§ã¯ãã®äœæ¥ãçµäºãããããã®ä»®æ³ç°å¢ãç¡å¹åã§ããŸãã
$ deactivate
ããã«ããã python ã³ãã³ããå®è¡ããŠãããã®ãããžã§ã¯ãçšïŒã®ããã±ãŒãžãã€ã³ã¹ããŒã«ãããïŒä»®æ³ç°å¢ãã python ããã°ã©ã ãåŒã³åºãããšã¯ããªããªããŸãã
äœæ¥æºåå®äº
ãããŸã§ã§ããããžã§ã¯ãã®äœæ¥ãå§ããæºåãæŽããŸããã
/// tip | è±ç¥è
äžèšã®å 容ãçè§£ãããã§ããïŒ
ãããããªãã以äžãèªã¿é²ããŠãã ãããðð€
///
ãªãä»®æ³ç°å¢ïŒ
FastAPIã䜿ã£ãäœæ¥ãããã«ã¯ã Python ã®ã€ã³ã¹ããŒã«ãå¿ èŠã§ãã
ãããããFastAPIãã䜿çšããããã®ä»ã®ããã±ãŒãžãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
ããã±ãŒãžãã€ã³ã¹ããŒã«ããã«ã¯ãéåžžãPython ã«ä»å±ãã pip ã³ãã³ã (ãŸãã¯åæ§ã®ä»£æ¿ã³ãã³ã) ã䜿çšããŸãã
ãã ããpip ãçŽæ¥äœ¿çšãããšãããã±ãŒãžã¯ã°ããŒãã«ãªPythonç°å¢ïŒOSå
šäœã«ã€ã³ã¹ããŒã«ãããPythonç°å¢ïŒã«ã€ã³ã¹ããŒã«ãããŸãã
åé¡ç¹
ã§ã¯ãã°ããŒãã«Pythonç°å¢ã«ããã±ãŒãžãã€ã³ã¹ããŒã«ããããšã®åé¡ç¹ã¯äœã§ããããïŒ
ããæç¹ã§ãããªãã¯ç°ãªãããã±ãŒãžã«äŸåããå€ãã®ããã°ã©ã ãæžãããšã«ãªãã§ãããããããŠããããã®äžã«ã¯åãããã±ãŒãžã®ç°ãªãããŒãžã§ã³ã«äŸåãããã®ãåºãŠããã§ããããð±
äŸãã°ã philosophers-stone ïŒè³¢è
ã®ç³ïŒãšãããããžã§ã¯ããäœæãããšããŸãããã®ããã°ã©ã 㯠**harry ïŒããªãŒïŒãšããããã±ãŒãžã®ããŒãžã§ã³ 1**ã«äŸåããŠããŸãããã®ããã harry ïŒããªãŒïŒãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã
flowchart LR
stone(philosophers-stone) -->|requires| harry-1[harry v1]
ããããã prisoner-of-azkaban ïŒã¢ãºã«ãã³ã®å人ïŒãšããå¥ã®ãããžã§ã¯ããäœæãããšããŸãããã®ãããžã§ã¯ãã harry ïŒããªãŒïŒã«äŸåããŠããŸããã**harry ïŒããªãŒïŒã®ããŒãžã§ã³ 3**ãå¿
èŠã§ãã
flowchart LR
azkaban(prisoner-of-azkaban) --> |requires| harry-3[harry v3]
ããããããã§åé¡ã«ãªãã®ã¯ãããããŒã«ã«ã®ä»®æ³ç°å¢ã§ã¯ãªãã°ããŒãã«ïŒç°å¢ïŒã«ããã±ãŒãžãã€ã³ã¹ããŒã«ãããªãã harry ïŒããªãŒïŒã®ã©ã®ããŒãžã§ã³ãã€ã³ã¹ããŒã«ãããéžã°ãªããšãããªãããšã§ãã
äŸãã°ã philosophers-stone ïŒè³¢è
ã®ç³ïŒãå®è¡ããã«ã¯ããŸã harry ïŒããªãŒïŒã®ããŒãžã§ã³ 1 ãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãïŒ
$ pip install "harry==1"
ããã«ãããharry ïŒããªãŒïŒããŒãžã§ã³1ãã°ããŒãã«ãªPythonç°å¢ã«ã€ã³ã¹ããŒã«ãããŸãã
flowchart LR
subgraph global[global env]
harry-1[harry v1]
end
subgraph stone-project[philosophers-stone project]
stone(philosophers-stone) -->|requires| harry-1
end
ãããã prisoner-of-azkaban ïŒã¢ãºã«ãã³ã®å人ïŒãå®è¡ãããå Žåã¯ãharry ïŒããªãŒïŒã®ããŒãžã§ã³ 1 ãã¢ã³ã€ã³ã¹ããŒã«ããharry ïŒããªãŒïŒã®ããŒãžã§ã³ 3 ãã€ã³ã¹ããŒã«ãçŽãå¿
èŠããããŸããïŒãããã¯ãåã«harry ïŒããªãŒïŒã®ããŒãžã§ã³ 3 ãã€ã³ã¹ããŒã«ããããšã§ãèªåçã«ããŒãžã§ã³ 1 ãã¢ã³ã€ã³ã¹ããŒã«ãããŸãïŒ
$ pip install "harry==3"
ãã®ããã«ããŠãã°ããŒãã«ç°å¢ãžã® harry ïŒããªãŒïŒã®ããŒãžã§ã³ 3 ã®ã€ã³ã¹ããŒã«ãå®äºããŸãã
ããããã philosophers-stone ïŒè³¢è
ã®ç³ïŒãåã³å®è¡ããããšãããšããã®ããã°ã©ã 㯠harry ïŒããªãŒïŒã®ããŒãžã§ã³ 1 ãå¿
èŠãªãããåäœããªããªãå¯èœæ§ããããŸãã
flowchart LR
subgraph global[global env]
harry-1[<strike>harry v1</strike>]
style harry-1 fill:#ccc,stroke-dasharray: 5 5
harry-3[harry v3]
end
subgraph stone-project[philosophers-stone project]
stone(philosophers-stone) -.-x|âïž| harry-1
end
subgraph azkaban-project[prisoner-of-azkaban project]
azkaban(prisoner-of-azkaban) --> |requires| harry-3
end
/// tip | è±ç¥è
Pythonã®ããã±ãŒãžã§ã¯ãæ°ããããŒãžã§ã³ã§äºææ§ãæãªã倿Žãé¿ããããåªããã®ãäžè¬çã§ãããããã§ã泚æãå¿ èŠã§ãããã¹ãŠãæ£åžžã«åäœããããšããã¹ãã§ç¢ºèªããŠãããæå³çã«æå®ããŠæ°ããããŒãžã§ã³ãã€ã³ã¹ããŒã«ããã®ãè¯ãã§ãããã
///
ããªãã®ãã¹ãŠã®ãããžã§ã¯ããäŸåããŠããã倿°ã®ä»ã®ããã±ãŒãžãäžèšã®åé¡ãæ±ããŠãããšæ³åããŠãã ãããããã¯ç®¡çãéåžžã«å°é£ã§ãããããŠãäºææ§ã®ãªãããŒãžã§ã³ã®ããã±ãŒãžã䜿ã£ãŠãããžã§ã¯ããå®è¡ãããªãåäœããªãã®ãåãããªããªãã§ãããã
ãŸãã䜿çšããŠããOSïŒLinuxãWindowsãmacOS ãªã©ïŒã«ãã£ãŠã¯ãPythonããã§ã«ã€ã³ã¹ããŒã«ãããŠããããšããããŸãããã®å Žåãç¹å®ã®ããŒãžã§ã³ã®ããã±ãŒãžãOSã®åäœã«å¿ èŠã§ããããšããããŸããã°ããŒãã«ç°å¢ã«ããã±ãŒãžãã€ã³ã¹ããŒã«ãããšãOSã«ä»å±ããããã°ã©ã ãå£ããŠããŸãå¯èœæ§ããããŸãã
ããã±ãŒãžã®ã€ã³ã¹ããŒã«å
Pythonãã€ã³ã¹ããŒã«ãããšãããã¡ã€ã«ãå«ãã ããã€ãã®ãã£ã¬ã¯ããªãäœæãããŸãã
ãããã®äžã«ã¯ãã€ã³ã¹ããŒã«ãããããã±ãŒãžãä¿åããããã®ãã®ããããŸãã
以äžã®ã³ãã³ããå®è¡ãããšãïŒ
// Don't run this now, it's just an example ð€
$ pip install "fastapi[standard]"
---> 100%
FastAPIã®ã³ãŒããå«ãå§çž®ãã¡ã€ã«ããé垞㯠PyPI ããããŠã³ããŒããããŸãã
ãŸããFastAPIãäŸåããä»ã®ããã±ãŒãžãããŠã³ããŒããããŸãã
ããããããããã®ãã¡ã€ã«ã¯è§£åãããã³ã³ãã¥ãŒã¿ã®ãããã£ã¬ã¯ããªã«é 眮ãããŸãã
ããã©ã«ãã§ã¯ããããã®ãã¡ã€ã«ã¯Pythonã®ã€ã³ã¹ããŒã«æã«äœæããããã£ã¬ã¯ããªãã€ãŸãã°ããŒãã«ç°å¢ã«é 眮ãããŸãã
ä»®æ³ç°å¢ãšã¯
ãã¹ãŠã®ããã±ãŒãžãã°ããŒãã«ç°å¢ã«é 眮ããããšã«ãã£ãŠçããåé¡ã®è§£æ±ºçã¯ãäœæ¥ãããããžã§ã¯ãããšã®ä»®æ³ç°å¢ã䜿çšããããšã§ãã
ä»®æ³ç°å¢ã¯ãã£ã¬ã¯ããªã§ãããã°ããŒãã«ç°å¢ãšéåžžã«äŒŒãŠããŠãäžã€ã®ãããžã§ã¯ãã§äœ¿ãç¹å®ã®ããã±ãŒãžçŸ€ãã€ã³ã¹ããŒã«ã§ããå Žæã§ãã
ãã®ããã«ããŠãããããã®ãããžã§ã¯ããç¬èªã®ä»®æ³ç°å¢ïŒ.venv ãã£ã¬ã¯ããªïŒã«ç¬èªã®ããã±ãŒãžçŸ€ãæã€ããšãã§ããŸãã
flowchart TB
subgraph stone-project[philosophers-stone project]
stone(philosophers-stone) --->|requires| harry-1
subgraph venv1[.venv]
harry-1[harry v1]
end
end
subgraph azkaban-project[prisoner-of-azkaban project]
azkaban(prisoner-of-azkaban) --->|requires| harry-3
subgraph venv2[.venv]
harry-3[harry v3]
end
end
stone-project ~~~ azkaban-project
ä»®æ³ç°å¢ã®æå¹åãšã¯
ä»®æ³ç°å¢ãæå¹ã«ãããšããäŸãã°æ¬¡ã®ã³ãã³ããå®è¡ããå ŽåãèããŸãïŒ
//// tab | Linux, macOS
$ source .venv/bin/activate
////
//// tab | Windows PowerShell
$ .venv\Scripts\Activate.ps1
////
//// tab | Windows Bash
ãããã¯ãWindowsã§Bashã䜿çšããŠããå Žå (Git Bashãªã©):
$ source .venv/Scripts/activate
////
ããã«ãã£ãŠãããã€ãã® ç°å¢å€æ°{.internal-link target=_blank} ãäœæã»ä¿®æ£ãããæ¬¡ã«å®è¡ãããã³ãã³ãã§äœ¿çšã§ããããã«ãªããŸãã
ãããã®ç°å¢å€æ°ã®ã²ãšã€ã«ã PATH 倿°ããããŸãã
/// tip | è±ç¥è
PATH 倿°ã«ã€ããŠã®è©³çŽ°ã¯ ç°å¢å€æ°{.internal-link target=_blank} ãåç
§ããŠãã ããã
///
ä»®æ³ç°å¢ãæå¹ã«ãããšããã®ä»®æ³ç°å¢ã®ãã¹ .venv/bin ïŒLinuxãšmacOSïŒãããã㯠.venv\Scripts ïŒWindowsïŒã PATH 倿°ã«è¿œå ãããŸãã
ãã®ç°å¢ãæå¹ã«ããåã® PATH 倿°ã次ã®ããã«ãªã£ãŠãããšããŸãã
//// tab | Linux, macOS
/usr/bin:/bin:/usr/sbin:/sbin
ããã¯ãOSã以äžã®ãã£ã¬ã¯ããªäžã§ããã°ã©ã ãæ¢ãããšãæå³ããŸãïŒ
/usr/bin/bin/usr/sbin/sbin
////
//// tab | Windows
C:\Windows\System32
ããã¯ãOSã以äžã®ãã£ã¬ã¯ããªäžã§ããã°ã©ã ãæ¢ãããšãæå³ããŸãïŒ
C:\Windows\System32
////
ä»®æ³ç°å¢ãæå¹ã«ãããšã PATH 倿°ã¯æ¬¡ã®ããã«ãªããŸãã
//// tab | Linux, macOS
/home/user/code/awesome-project/.venv/bin:/usr/bin:/bin:/usr/sbin:/sbin
ããã¯ãOSãä»ã®ãã£ã¬ã¯ããªãæ¢ãããåã«ãæåã«ä»¥äžã®ãã£ã¬ã¯ããªäžã§ããã°ã©ã ãæ¢ãå§ããããšãæå³ããŸãïŒ
/home/user/code/awesome-project/.venv/bin
ãã®ãããã¿ãŒããã«ã§ python ãšå
¥åããéã«ãOSã¯Pythonããã°ã©ã ã以äžã®ãã¹ã§çºèŠãã䜿çšããŸãã
/home/user/code/awesome-project/.venv/bin/python
////
//// tab | Windows
C:\Users\user\code\awesome-project\.venv\Scripts;C:\Windows\System32
ããã¯ãOSãä»ã®ãã£ã¬ã¯ããªãæ¢ãããåã«ãæåã«ä»¥äžã®ãã£ã¬ã¯ããªäžã§ããã°ã©ã ãæ¢ãå§ããããšãæå³ããŸãïŒ
C:\Users\user\code\awesome-project\.venv\Scripts
ãã®ãããã¿ãŒããã«ã§ python ãšå
¥åããéã«ãOSã¯Pythonããã°ã©ã ã以äžã®ãã¹ã§çºèŠãã䜿çšããŸãã
C:\Users\user\code\awesome-project\.venv\Scripts\python
////
éèŠãªç¹ã¯ãä»®æ³ç°å¢ã®ãã¹ã PATH 倿°ã®å
é ã«é
眮ããããšã§ããOSã¯å©çšå¯èœãªä»ã®PythonãèŠã€ããããåã«ããã®ä»®æ³ç°å¢ã®PythonãèŠã€ããããã«ãªããŸãããã®ããã«ããŠã python ãå®è¡ãããšãã«ãä»ã® python ïŒäŸãã°ã°ããŒãã«ç°å¢ã® python ïŒã§ã¯ãªãããã®ä»®æ³ç°å¢ã®Pythonã䜿çšããããã«ãªããŸãã
ä»®æ³ç°å¢ãæå¹ã«ããŠå€æŽãããããšã¯ä»ã«ããããŸããããããæãéèŠãªå€æŽã®ã²ãšã€ã§ãã
ä»®æ³ç°å¢ã®ç¢ºèª
ä»®æ³ç°å¢ãæå¹ãã©ãããäŸãã°æ¬¡ã®ããã«ç¢ºèªã§ããŸããïŒ
//// tab | Linux, macOS, Windows Bash
$ which python
/home/user/code/awesome-project/.venv/bin/python
////
//// tab | Windows PowerShell
$ Get-Command python
C:\Users\user\code\awesome-project\.venv\Scripts\python
////
ããã¯ã䜿çšããã python ããã°ã©ã ããã®ä»®æ³ç°å¢ã®ãã®ã§ããããšãæå³ããŸãã
LinuxãmacOSã§ã¯ which ããWindows PowerShellã§ã¯ Get-Command ã䜿çšããŸãã
ãã®ã³ãã³ãã®åäœã¯ã PATH倿°ã«èšå®ãããããããã®ãã¹ãé ã«ç¢ºèªããŠãããåŒã°ããŠãã python ããã°ã©ã ãæ¢ããŸãããããŠãèŠã€ããæ¬¡ç¬¬ãã®ããã°ã©ã ãžã®ãã¹ã衚瀺ããŸãã
æãéèŠãªããšã¯ã python ãåŒã°ãããšãã«ããŸãã«ãã®ã³ãã³ãã§ç¢ºèªãã "python" ãå®è¡ãããããšã§ãã
ããããŠãèªåãæ³å®éãã®ä»®æ³ç°å¢ã«ãããã確èªã§ããŸãã
/// tip | è±ç¥è
ããä»®æ³ç°å¢ãæå¹ã«ãããã®Pythonã䜿çšãããŸãŸä»ã®ãããžã§ã¯ãã«ç§»åããŠããŸãããšã¯ç°¡åã«èµ·ããåŸãŸãã
ãããŠããã®ç¬¬äºã®ãããžã§ã¯ãã¯åäœããªãã§ãããããªããªãå¥ã®ãããžã§ã¯ãã®ä»®æ³ç°å¢ã®èª€ã£ãPythonã䜿çšããŠããããã§ãã
ãã®ãããã©ã® python ã䜿çšãããŠããã®ã確èªã§ããããšã¯åœ¹ç«ã¡ãŸããð€
///
ãªãä»®æ³ç°å¢ãç¡å¹åããã®ã
äŸãã°ãphilosophers-stone ïŒè³¢è
ã®ç³ïŒãšãããããžã§ã¯ãã§äœæ¥ãããŠããŠããã®ä»®æ³ç°å¢ãæå¹ã«ããå¿
èŠãªããã±ãŒãžãã€ã³ã¹ããŒã«ããŠãã®ç°å¢å
ã§äœæ¥ãé²ããŠãããšããŸãã
ãããããå¥ã®ãããžã§ã¯ãã prisoner-of-azkaban ïŒã¢ãºã«ãã³ã®å人ïŒã«åãæããããšããŸãã
ãã®ãããžã§ã¯ããã£ã¬ã¯ããªãžç§»åããŸãïŒ
$ cd ~/code/prisoner-of-azkaban
ãã philosophers-stone ïŒè³¢è
ã®ç³ïŒã®ä»®æ³ç°å¢ãç¡å¹åããŠããªããšãpython ãå®è¡ãããšãã ã¿ãŒããã«ã¯ philosophers-stone ïŒè³¢è
ã®ç³ïŒã®Pythonã䜿çšããããšããŸãã
$ cd ~/code/prisoner-of-azkaban
$ python main.py
// Error importing sirius, it's not installed ð±
Traceback (most recent call last):
File "main.py", line 1, in <module>
import sirius
ãããããã®ä»®æ³ç°å¢ãç¡å¹åãã prisoner-of-azkaban ïŒã¢ãºã«ãã³ã®å人ïŒã®ããã®æ°ããä»®æ³ç°å¢ãæå¹ã«ããã°ã python ãå®è¡ãããšãã« prisoner-of-azkaban ïŒã¢ãºã«ãã³ã®å人ïŒã®ä»®æ³ç°å¢ã® Python ã䜿çšãããããã«ãªããŸãã
$ cd ~/code/prisoner-of-azkaban
// You don't need to be in the old directory to deactivate, you can do it wherever you are, even after going to the other project ð
$ deactivate
// Activate the virtual environment in prisoner-of-azkaban/.venv ð
$ source .venv/bin/activate
// Now when you run python, it will find the package sirius installed in this virtual environment âš
$ python main.py
I solemnly swear ðº
ä»£æ¿ææ®µ
ããã¯ãããããä»çµã¿ãæ ¹æ¬ããåŠã¶ããã®ã·ã³ãã«ãªå ¥éã¬ã€ãã§ãã
ä»®æ³ç°å¢ãããã±ãŒãžã®äŸåé¢ä¿ïŒrequirementsïŒããããžã§ã¯ãã®ç®¡çã«ã¯ãå€ãã®ä»£æ¿ææ®µããããŸãã
æºåãæŽããããã±ãŒãžã®äŸåé¢ä¿ãä»®æ³ç°å¢ãªã©ãããžã§ã¯ãå šäœã®ç®¡çããŒã«ã䜿ããããšèããããuv ã詊ããŠã¿ãããšãããããããŸãã
uv ã§ã¯ä»¥äžã®ãããªå€ãã®ããšãã§ããŸãïŒ
- ç°ãªãããŒãžã§ã³ãå«ããPython ã®ã€ã³ã¹ããŒã«
- ãããžã§ã¯ãããšã®ä»®æ³ç°å¢ã®ç®¡ç
- ããã±ãŒãžã®ã€ã³ã¹ããŒã«
- ãããžã§ã¯ãã®ããã±ãŒãžã®äŸåé¢ä¿ãããŒãžã§ã³ã®ç®¡ç
- ããã±ãŒãžãšãã®ããŒãžã§ã³ã®ãäŸåé¢ä¿ãå«ããå³å¯ãªçµã¿åãããä¿æããããã«ãã£ãŠãæ¬çªç°å¢ã§ãéçºç°å¢ãšå šãåãããã«ãããžã§ã¯ããå®è¡ã§ããïŒããã¯lockingãšåŒã°ããŸãïŒ
- ãã®ä»ã®ããŸããŸãªæ©èœ
ãŸãšã
ãããŸã§èªã¿ãã¹ãŠçè§£ãããªããäžéã®å€ãã®éçºè ãšæ¯ã¹ãŠãä»®æ³ç°å¢ã«ã€ããŠããªãã¯ããå€ãã®ããšãç¥ã£ãŠããŸããð€
ãããã®è©³çްãç¥ãããšã¯ãå°æ¥ãè€éã«èŠããäœãã®ãããã°ã«ãã£ãšåœ¹ç«ã€ã§ãããããããããã®é ã«ã¯ãããªãã¯ãã®ãã¹ãŠã®åäœãæ ¹æ¬ããçè§£ããŠããã§ããããð