ã¯ããã«
If a thing can be done adequately by means of one, it is superfluous to do it by means of several; for we observe that nature does not employ two instruments if one suffices.
-- Thomas Aquinas (1225-1274)
pyenv-virtualenv ãšããããŒã«ããç§ã¯é·ãã䜿ã£ãŠããã
pyenv-virtualenvã¯çŽ æŽãããããŒã«ã§ãç§ã¯ãããžã§ã¯ããåãæ¿ãããšããPythonã®ç°å¢ã«ã€ããŠäžåæ©ãããšãªããã cdããã ãã§ããã£ãããä»ã®ç°å¢ã§äœæ¥ãããšãããrequirements.txtãéããŠå
šãåé¡ãªãç°å¢ãã³ããŒããããšãã§ããŠããã
ç§ã®.zshrcã«ã¯ããPyenv-virtualenvããªããã°åæã«git cloneããŠãã¹ãéããpyenv-initãå®è¡ããããšããåŠçãå ã
ãšé®åº§ããŠããã
ããããæä»£ã¯å€ãã£ãã
Pipenvã詊ãããšããç§ã®äžã§pyenv-virtualenvã¯çµãããè¿ããã
Pyenvã¯ç§ã«ãšã£ãŠãã«ããŒã¶ãŒã ã£ãããpyenv-virtualenvã¯ç§ã«ãšã£ãŠæéå°ãè«ã ã£ãã®ã ã
仿¥ã¯ãŸã pyenv-virtualenvã«åãããŠãã亡éã®ããªãã«åããŠãPipenvãžã®è»¢çã®éãéãããšæãã
Pythonãåãå·»ããç°å¢æŠåœæä»£
ãã®èšäºãèªãããã«ããŸãã¯Pythonã«ãããç°å¢æ§ç¯ææ³ãããã€ãç¥ã£ãŠãããã°ãªããªãã ããã
Pythonã€ã³ã¿ããªã¿ã«ã¯ãæ§ã
ãªããŒãžã§ã³ããããããããªããèå€åŠè
ãªããPython2ç³»ã®ååšãç¥ã£ãŠããããšã ããã3ç³»ã®äžã§ãäºææ§ã®ãªã倿Žã¯ããããè¡ãããŠãããããããã¯PyPyãIronPythonãšãã£ãïŒããç¥ãããïŒPythonãšã¯ç°ãªãå®è£
ã®ã€ã³ã¿ããªã¿ãããã
ã€ãŸããæã
ã¯ããããã®Pythonãæã£ãŠããŠããããããããžã§ã¯ãã«å¿ããŠé©åã«åãæ¿ããªããã°ãªããªãã
ãŸããPythonã«ã¯æ§ã
ãªããã±ãŒãžããããéçºè
ã¯ãããã奜ãåæã«ã€ã³ã¹ããŒã«ããŠäœ¿ãããã ãããã¡ãããããã®ããã±ãŒãžã«ãããŒãžã§ã³ãäºææ§ã®åé¡ã¯ååšãããããã®ãããžã§ã¯ãã¯ããã®ããã±ãŒãžãã€ã³ã¹ããŒã«ããªããšåããŸããããã ããããŒãžã§ã³xx以äžyy以äžã§ããããšããæ³šææžãããã¹ãŠã®ãããžã§ã¯ãã«ååšããŠãããããããããŸãæ±ãããã«ã¯ããã±ãŒãžã®ããŒãžã§ã³ãåãæ¿ããŠãããããŒã«ãåœç¶å¿
èŠã ã
ããããããã§ãæã
ã¯2ã€ã®ãã®ããšã«ã€ããŠä»®æ³ç°å¢ãå¿
èŠãšããŠããã
ããªãã¡ãPythonã€ã³ã¿ããªã¿æ¬äœãšãããã±ãŒãžçŸ€ã§ããã
ãŸãšã
| ã€ã³ã¿ããªã¿åæ¿ | ããã±ãŒãžåæ¿ | ããã±ãŒãžã€ã³ã¹ããŒã« | |
|---|---|---|---|
| pyenv | â | ||
| virtualenv | â | â | |
| pip | â | ||
| venv | â | ||
| pyenv-virtualenv | â | â | |
| virtualenvwrapper | â | ||
| Anaconda | â | â | â³ |
| Pipenv | â | â |
pyenv
pyenvã¯ãåè¿°ãã2ã€ã®ãã¡åè
ã®ã¿ãæ
åœããä»®æ³ç°å¢ãããŒãžã£ã§ããã
pyenvã®ããããšã¯ä»¥äžã®éãã§ããïŒ
-
$PATHã®å é ã«PYENV/shimsãæ¿å ¥ããããããPythonç³»ã³ãã³ããžã®ã¢ã¯ã»ã¹ã«å²ã蟌ãã - ããŸåããã¹ã
Pythonã€ã³ã¿ããªã¿ãæ¢ãã - åãåã£ãã³ãã³ãïŒäŸãã°
python main.pyãpip3 install -rïŒãããã®æ¢ããã€ã³ã¿ããªã¿ã«æããã
ããªãã¡ã諞ã ã®ã³ãã³ããé©åãªçªå£ã«æ¯ãåãããåä»ä¿ãåŒãåããŠãããã®ã§ããã
é©åãªã€ã³ã¿ããªã¿ãæ¢ãããã«ãpyenvã¯ä»¥äžã®æäœãè¡ãïŒ
- ããç°å¢å€æ°
PYTHON_VERSIONãèšå®ãããŠããã°ããã®ããŒãžã§ã³ã«åŸãã - ããã§ãªããã°ãä»ã®ãã£ã¬ã¯ããªããé ã«èŠªãã£ã¬ã¯ããªãé¡ã£ãŠããããã®éäžã§
.python_versionãã¡ã€ã«ãèŠã€ããã°ãããã«æžãããŠããããŒãžã§ã³ã«åŸãã - ã«ãŒããŸã§é¡ã£ãŠãèŠã€ãããªããã°ãã°ããŒãã«ã«èšå®ãããŠããããŒãžã§ã³ã«åŸãã
ããããããšã§ãä»ãããããžã§ã¯ãã«ãšã£ãŠæãé©åãªPythonãèµ·åããããšãã§ããã®ã§ããã
çµå±ãPyenvãçšããå©ç¹ã¯ä»¥äžã®éãïŒ
- ç¶æ³ã«å¿ããŠé©åãª
Pythonã€ã³ã¿ããªã¿ããæåã§åãæ¿ããããšãªãçšããããã - ãããããª
Pythonã€ã³ã¿ããªã¿ããã³ãã³ãäžçºã§ã€ã³ã¹ããŒã«ã»ã¢ã³ã€ã³ã¹ããŒã«ã§ããã
virtualenv
virtualenvã¯ãåè¿°ãã2ã€ã®äž¡æ¹ãããªãã¡Pythonã€ã³ã¿ããªã¿ãšããã±ãŒãžçŸ€ãåæã«åãæ¿ããããä»®æ³ç°å¢ãããŒãžã£ã§ããã
virtualenvã¯ãENV/以äžã«Pythonã€ã³ã¿ããªã¿ãã€ã³ã¹ããŒã«ãããããã±ãŒãžãªã©ãã¹ãŠãä¿åããŠããããããŠãsource ENV/bin/activateãè¡ããšïŒãããvirtualenvã䜿ãããã®éæ³ã®åªæã§ããïŒããã®ä»®æ³ç°å¢ã®ãã©ã«ãã«ãã¹ãéãããã以äžã®ããšã¯äœãããªãã
ãã¡ãã¡ä»®æ³ç°å¢ã®å Žæãæ¢ããŠactivateããªããã°ãªããªããšããé¢åèãã¯ãããã®ã®ãåäœã¯åçŽæå¿«ã§ãããç°å¢ãåé¢ãããŠããããšãããããããããã ããpyenvãšã¯ç°ãªããæ°ããPythonãã€ã³ã¹ããŒã«ãããã¯ã§ããªãã®ã§æ³šæãå¿
èŠã§ããããããŸã§ã$PATHãæ¢ããŠPythonãèŠã€ãããã®ã€ã³ã¿ããªã¿ãã³ããŒããã ãã§ããã
çµå±ãvirtualenvãçšããå©ç¹ã¯ä»¥äžã®éãã§ããïŒ
-
Pythonã€ã³ã¿ããªã¿ãšããã±ãŒãžã®çµã¿åããã奜ããªã ãäœããåé¢ããããšãã§ããã - ãããã
activateã§åãæ¿ããããšãã§ããã
pip
pipã¯ãPythonå
¬åŒã®ããã±ãŒãžç®¡çããŒã«ã§ããã
Pythonãç¥ã£ãŠãã人ã§ããã°ããã®äžŠã³ã«pipãå±
ãã®ã¯ãããããšæããããããªãã
å®éãpipã¯Pythonã€ã³ã¿ããªã¿ãåãæ¿ããŠã¯ãããªãããããã±ãŒãžã®ä»®æ³ç°å¢ãäœã£ãŠãããããã§ããªãã
pipãããããšã¯ãPythonã®ããã±ãŒãžãæ¢ããé©åãªããŒãžã§ã³ã®ããã±ãŒãžããäŸåé¢ä¿ã解決ããªããã€ã³ã¹ããŒã«ããããšã§ããã
venvãpyenv-virtualenvãªã©ãå€ãã®ä»®æ³ç°å¢ããŒã«ã¯pipã䜿ã£ãŠããã±ãŒãžãã€ã³ã¹ããŒã«ããããšãæ³å®ããŠããã
pipã§ã€ã³ã¹ããŒã«ããããã±ãŒãžã¯ãrequirements.txtãšãã圢ã§å
±æããããšãã§ããã
ãã®requirements.txtã«ã¯ãå¿
èŠã«é§ãããŠã€ã³ã¹ããŒã«ããããã±ãŒãžã®ã»ããäŸåé¢ä¿ã®è§£æ±ºã«å¿
èŠã ã£ãããã±ãŒãžãéçºæã«å¿
èŠã ã£ãlinterããã±ãŒãžãªã©ããã¹ãŠèšè¿°ãããŠããã
å¥ã®ç°å¢ã§ãã®ãããžã§ã¯ããå®è¡ããããã°ãé©åœãªä»®æ³ç°å¢ã®äžã§pip install -r requirements.txtãšããã°ããããã®ããã±ãŒãžãå
šãŠã€ã³ã¹ããŒã«ãããå
ãšåãç°å¢ã§å®è¡ã§ãããšããããã ã
ããã§pipã玹ä»ããçç±ã¯ããã¡ããããã®ããšpipã®ä»äºã代æ¿ããããŒã«ãç»å Žããããã§ããã
pyenv-virtualenv
pyenv-virtualenvã¯ãpyenvã®ã·ã¹ãã ã«ä¹ã£ããã€ã€ãvirtualenvãçšããããšãã§ããããŒã«ã§ããã
pyenvãšãvirtualenvãšãå¥ç©ã§ããç¹ã«æ³šæããããã
pyenv-virtualenvã§ã¯ãpyenvãšåæ§ã®ã€ã³ã¿ãŒãã§ãŒã¹ã§virtualenvãçšããããšãã§ãããããããpyenvã®ããã«ãç¶æ³ã«å¿ããŠé©åãªä»®æ³ç°å¢ããæåã§åãæ¿ããããšãªãçšããããšãã§ããã
ããªãã¡ãvirtualenvã§ã¯
~$ cd project1 # Projectã«ç§»å
~/project1$ python -V
python 2.7.10 # ãŸã åãæ¿ãã£ãŠããªã
~/project1$ source ~/.virtualenv/project1/bin/activate # ä»®æ³ç°å¢ãã¢ã¯ãã£ããŒã
~/project1 (project1)$ python -V
python 3.7.3 # åãæ¿ãã£ã
ãšãããããªåŠçãèžãã§ããã®ãã
~$ cd project1 # Projectã«ç§»å
~/project1 (project1)$ python -V
python 3.7.3 # ããåãæ¿ãã£ã
~/project1 (project1)$ ls -a
. .. .python_version # .python_version ã«ä»®æ³ç°å¢ã®ååãæžãããŠãã
ãšãcdããã ãã§ä»®æ³ç°å¢ã®åãæ¿ããæžãã§ããã®ã§ããã
ã§ããã©ããã£ãŠïŒ
å®ã¯ãpyenv-virtualenvã¯ãããããã³ãã³ãã®ããšã«activateã®ãã§ãã¯ãè¡ã£ãŠããã
å
è¿°ããããä»ã®ãã£ã¬ã¯ããªããé ã«èŠªãã£ã¬ã¯ããªãé¡ã£ãŠããããã®éäžã§.python_versionãã¡ã€ã«ãèŠã€ããã°ãããã«æžãããŠããããŒãžã§ã³ã«åŸããããããã¹ãŠã®ã³ãã³ãã®ããšã«è¡ã£ãŠããã®ã§ããã
åœç¶ãããããã³ãã³ãã®å®è¡é床ã¯ç®ã«èŠããŠäœäžããã
activationã®æéãçãããã«ãããªãã®ã³ã¹ããæ¯æã£ãŠããã®ã§ããã
çµå±ãpyenv-virtualenvãçšããå©ç¹ã¯ä»¥äžã®éãã§ããïŒ
-
pyenvãšåãã€ã³ã¿ãŒãã§ãŒã¹ã§ãvirtualenvãçšããããšãã§ããã -
virtualenvã§çšããPythonã«ãpyenvã§ã€ã³ã¹ããŒã«ããpythonãçšããããšãã§ããã -
virtualenvã®activateã«ããããŒãžã§ã³ã®åãæ¿ãããæåã§åãæ¿ããããšãªãçšããããã
venv (æ§ç§°: pyvenv)
venvã¯ãPythonå
¬åŒãæäŸããä»®æ³ç°å¢ãããŒãžã£ã§ããã
ãã®æåã¯virtualenvãšããŸãå€ãããªãã
å
¬åŒãæäŸããŠããã®ã ããvirtualenvãçã§äœ¿ãããããªããã£ã¡ã䜿ãã®ãããã®ã§ã¯ãªãã ãããã
virtualenvwrapper
virtualenvwrapperã¯ãäœããšäœ¿ãåæã®æªãvirtualenvã®åäœãé èœããå€ãªããšãããªãããã«ããã©ãããŒã§ããã
䜿ã£ãããšããªãã®ã§ãããŸãããããªãããããšãªããvenvã䜿ã£ãŠããã°ãããšæãã
Anaconda (, miniconda, conda)
Anacondaã¯ãPythonã€ã³ã¿ããªã¿ã®ã€ã³ã¹ããŒã«ããä»®æ³ç°å¢ã®äœæãããã±ãŒãžã®ã€ã³ã¹ããŒã«ããã®ä»ã®ç°å¢æ§ç¯ãªã©ãªã©ãPythonã«çºããããããããšããã¹ãŠäžæã«åŒãåããã¹ãŒããŒãã«ããŒã¶ãŒã§ããã
ããããããšãåŒãåããã®ã§ãããã§è¿°ã¹ãŠãããããªã€ã³ã¿ããªã¿ã®ã€ã³ã¹ããŒã«ãåãæ¿ããããã±ãŒãžã®åãæ¿ããªã©ãåœç¶åŒãåããŠãããã
ãã¡ãããAnacondaã«ã¯ãpipã代æ¿ããæ©èœããããäŸãã°pipã§ã¯pip install mypyãšãããšãããcondaã§ã¯conda install mypyãªã©ãšããããšã§mypyããã±ãŒãžãã€ã³ã¹ããŒã«ããããšãã§ããã
ãŸãããã®ããã±ãŒãžç®¡çã·ã¹ãã ãšPythonã€ã³ã¿ããªã¿ã ããåããæå°éã®AnacondaããminicondaãšããŠé
åžãããŠããã
Anacondaã䜿ããªããPythonã«é¢ããããããããšã¯ãã¹ãŠAnacondaã«ä»»ããŠããŸããšããæ°æã¡ãå¿
èŠã ã
Anacondaã®æ
åœç¯å²ãããŸãã«ã倧ããããŠãä»ã®ã©ããªä»®æ³ç°å¢ããŒã«ãšãç«¶åããŠããŸãããã§ããã
ç¹ã«ãAnacondaã®ããã±ãŒãžç®¡çãpipãšç°ãªãããšã§ããã»ããããã±ãŒãžã®ããŒãžã§ã³ãcondaã«ãªãïŒ ã§ãããŸããpipã¯äœ¿ããªãâŠâŠããšããããšãçµæ§ãã£ããããã®ã ããã®ç¹ã¯æ³šæããªããã°ãªããªãã
äœã«ãããã©ããŸã§ãAnacondaã®æ¯é
é åãªã®ããæç¢ºã«çè§£ã§ããããã«ãªããŸã§ã¯ãAnacondaã䜿ãã¹ãã§ã¯ãªãããšå人çã«ã¯æã次第ã ã
Pipenv
Pipenvã¯ãvirtualenvã®ä»äºã«å ããŠãPipfileãšããæ¬¡äžä»£ã®ããã±ãŒãžç®¡çã·ã¹ãã ãå®è£
ããããŒã«ã§ããã
Pipenvã¯ä»®æ³ç°å¢ãäœæããã ãã§ãªããpipãšåãããã«ããã±ãŒãžç®¡çãè¡ãããšãã§ããããã®éãpipãšã¯ç°ãªãããäœãèŠæ±ãããããã±ãŒãžã§ãäœãäŸåé¢ä¿ã®è§£æ±ºã«å¿
èŠã ã£ãããã±ãŒãžãªã®ãããèšé²ããããšãã§ããã
ããã«ãã£ãŠãã©ã®ããã±ãŒãžãã©ã®ããã±ãŒãžã«ãã£ãŠèŠæ±ãããã©ã®ããã±ãŒãžã«ãã£ãŠããŒãžã§ã³åºå®ãããã®ããããããããã±ãŒãžãªã¹ãããããã«ãªãã®ã§ããã
Pythonã«éŠŽæã¿ããªã人ã«ãšã£ãŠã¯ãããŸãå©ç¹ãããããªããããããªãã
å®éãããŸãéçºãããªãã®ã§ããã°ãvenvã§ååãªã®ã§ã¯ãªãããšããæ°ãããã
ããšãããã¯å人çãªäž»èгãªã®ã ããã€ã³ã¿ãŒãã§ãŒã¹ãéåžžã«ããããããã
æ°ãããããžã§ã¯ãã§ä»®æ³ç°å¢ãäœããããã°pipenv installãšããã ããgit cloneããŠãããããžã§ã¯ãã«çœ®ããŠãã£ãPipfileãèªã¿èŸŒããšããpipenv installãšããã ããpipã®ä»£ããã«äœ¿ããšããpipenv install <package-name>ãšpipãpipenvã«çœ®ãæããã ãã倧å€ããããããã
ãŸãšã
| ã€ã³ã¿ããªã¿åæ¿ | ããã±ãŒãžåæ¿ | ããã±ãŒãžã€ã³ã¹ããŒã« | |
|---|---|---|---|
| pyenv | â | ||
| virtualenv | â | â | |
| pip | â | ||
| venv | â | ||
| pyenv-virtualenv | â | â | |
| virtualenvwrapper | â | ||
| Anaconda | â | â | â³ |
| Pipenv | â | â |
pyenv-virtualenvããããPipenvã䜿ã
以äžã®ä»®æ³ç°å¢ããŒã«ãæ¯èŒããäžã§ãç§ã¯pyenv-virtualenvããããPipenvã䜿ãããšã«ããã
pyenv-virtualenvããããããšã§ãç§ã®shellã¯çéã«ãªã£ããããäºåºŠãšpyenv-virtualenvã䜿ãã€ããã¯ãªãã
Pipenvã¯ãããŸã§ãä»®æ³ç°å¢ãããŒãžã£ãªã®ã§ãPythonèªäœã®ã€ã³ã¹ããŒã«ã¯å¥ã®æ¹æ³ã§è¡ãå¿
èŠãããã
pyenvã«ä»»ããŠãããã®ã ãïŒå®éãPipenvã«ã¯pyenvãšå調ããä»çµã¿ãããïŒãpyenvã®ãã£ãŠãããããšã®ãã¡ãç¶æ³ã«å¿ããŠé©åãªPythonã€ã³ã¿ããªã¿ãçšããããããšããéšåã¯Pipenvããã§ã«æ
åœããŠãããä»äºã被ã£ãŠããŸããšæã£ãã®ã§ãPythonã¯æåã§ã€ã³ã¹ããŒã«ããããšã«ããã
å®éãæ®éã®äººéã«å¿
èŠãªPythonã¯ææ°ããŒãžã§ã³ã®stableãªpythonïŒçŸæç¹ã§ã¯3.7.3ïŒã ãã§ãããããšã¯æã
3.6ã3.5ãèå€åŠè
ã®ããã«2.7ãå¿
èŠã«ãªããããã§ãããPyenvã®ãããªåŒ·ãã·ã¹ãã ã®åºãå¹ã¯ãã¶ããªãã
Pipenvã®ã€ã³ã¹ããŒã«ã¯åçŽã§ãå
¬åŒããŒãžã«æžãããŠããéããbrewãaptã§å
¥ãããããããã¯python -m pip install --user pipenvãšããã ãã§ããã
æ°ãããããžã§ã¯ããç«ã¡äžããéã«ã¯ã
~$ mkdir project1 # Projectãäœæ
~$ cd project1 # Projectã«ç§»å
~/project1$ pipenv install # ä»®æ³ç°å¢ãäœæ
~/project1$ pipenv shell # ä»®æ³ç°å¢ã«å
¥ã
ãšããã°ããã
次ããã¯åã«pipenv shellãšããã ãã§ããã
ãããã«
ãã®èšäºã§ã¯ãpyenvãvirtualenvãpipãvenvãpyenv-virtualenvãvirtualenvwrapperãAnacondaãPipenvã䞊ã¹ããããã®ç¹æ§ã«ã€ããŠè»œããŸãšããã
ãã®èšäºãçããã®Pythonã©ã€ãã®äžå©ãšãªãã°å¹žãã§ããã
Pipenvæµè¡ãã