æ°ããvirtualenvãäœæããããšããã®virtualenvã«ã¯å€ãã®ãã®ãã€ã³ã¹ããŒã«ãããŸãã ãããã®1ã€ã¯ãPythonããã±ãŒãžã€ã³ã¹ããŒã©ãŒpipã§ãã
Linuxã§ã¯ãpipå®è¡å¯èœãã¡ã€ã«ã¯ã·ã§ã«ã¹ã¯ãªããã§ãã ãã®pipã·ã§ã«ã¹ã¯ãªããã®äžéšã«ã¯ãvirtualenvã®pythonã€ã³ã¿ãŒããªã¿ãŒãæå®ããã·ãã³ïŒïŒïŒïŒè¡ããããŸãã ãã®è¡ã«ã¯ãPythonã€ã³ã¿ãŒããªã¿ãŒãžã®çµ¶å¯Ÿãã¹ãå«ãŸããŠããŸãã
virtualenvå ã®pythonã€ã³ã¿ãŒããªã¿ãŒãžã®çµ¶å¯Ÿãã¹ãéåžžã«é·ãå ŽåïŒæ·±ããã¹ãããããã¹åã倧ããªãã¹åïŒãã·ãã³è¡ã«èš±å¯ãããŠããæ倧é·ãè¶ ããå¯èœæ§ããããŸãã
ã·ãã³ã©ã€ã³ã®æ倧é·ã¯ã/ usr / include / linux /binfmts.hã§èšå®ãããBINPRM_BUF_SIZEã«ãã£ãŠã«ãŒãã«ã§å¶éãããŸãã ç§ã調ã¹ãLinuxãã·ã³ã§ã¯ããã®å¶éã¯128ã«èšå®ãããŠããŸãã
ãã®ãããPython virtualenvãäœæããããã¹ãé·ããªãããããšããã®virtualenvã®pipã䜿çšã§ããªããªããŸãã ãäžæ£ãªã€ã³ã¿ããªã¿ïŒãã®ãããªãã¡ã€ã«ãŸãã¯ãã£ã¬ã¯ããªã¯ãããŸããããšãããšã©ãŒã§å€±æããŸãã
ãã®åé¡ã®åé¿çã¯ãpipãçŽæ¥å®è¡ããã®ã§ã¯ãªããvirtualenvã®pythonã€ã³ã¿ãŒããªã¿ãŒãå®è¡ããå®è¡ãããœãŒã¹ãšããŠpipã¹ã¯ãªãããpythonã«æž¡ãããšã§ãã
ç§ããã®åé¡ãçµéšããŠããŸãã
ç§ãã
åé¿çãããããšãïŒ
ã©ãããŒã¹ã¯ãªããã¯ãå®éã«ã¯setuptoolsïŒsdistããã€ã³ã¹ããŒã«ããå ŽåïŒãŸãã¯distlibïŒwheelããã€ã³ã¹ããŒã«ããå ŽåïŒã«ãã£ãŠçæãããããšã«æ³šæããŠãã ããã ãããã£ãŠããã®åé¡ã®ä¿®æ£ã¯ããããã®ãããžã§ã¯ãããå®éã«èŠæ±ããå¿ èŠããããŸãã
ãããããããOSã®å¶éã§ããå Žåãããããå®è¡å¯èœãªä¿®æ£ã¯_ãªã_ã®ã§ããããïŒ ãã€ãŠãPerlã¯éæ³ã®åªæã䜿ã£ãŠã¹ã¯ãªãããå®è¡ããããšãèŠããŠããããã§ãïŒã°ãŒã°ã«å°ã...ïŒã¯ãããã®ãããªãã®ïŒPythonçšã«ç¿»èš³ïŒ
#!/bin/sh
eval 'exec /the/long/interpreter/path/to/python $0 ${1+"$@"}'
Pythonãeval-execè¡ãå®è¡ããããšããªãããã«ãããã€ãã®è¿œå ã®ãã®ãå¿ èŠã«ãªããŸãããããã¯æ©èœããå¯èœæ§ããããŸãã
誰ããsetuptoolsãšdistlibã®æ©èœãªã¯ãšã¹ããšããŠãã®ãããªãã®ãææ¡ãããã®ãªããããã¯çŽ æŽãããããšã§ãã
ãã®ãããPython virtualenvãäœæããããã¹ãé·ããªãããããšããã®virtualenvã®pipã䜿çšã§ããªããªããŸãã
ãã®åé¡ãçºçããã·ã¹ãã ã§virtualenv
ãå®è¡ãããšãã³ãã³ãã¯ããã®ãããªé·ããã¹åãæã€ãã£ã¬ã¯ããªã«ããããšã¯åºæ¬çã«ãµããŒããããŠããªããšããèŠåïŒãŸãã¯ãšã©ãŒïŒãåºåããå Žåã¯ã_æ¬åœã«_çŽ æŽãããã§ããããçŸæç¹ã§ã®ããã©ã«ãã
ç§ããããæã£ãŠããŸãã pwdãžã®ãã¹ã_éåžžã«_é·ãJenkinsãã«ãå
ããpip
ãå®è¡ããŠããã®ã§ãããã¯ç¹ã«ç§ã«ãšã£ãŠåé¡ã§ãã èå³æ·±ãããšã«ãåãããã«ãã«ãããããã«ãã¹ã¬ãŒããããã€ãããïŒãã¹ãŠBINPRM_BUF_SIZEã128ã«èšå®ãããŠãããpipãpythonãvirtualenvã®ããŒãžã§ã³ãåãã§ãïŒããã¹ã®é·ããç°ãªã£ãŠããŠããäžéšã§ã¯çºçããŠããŸãããä»ã§ã¯çºçããŠããŸããã
@ b-longã®ææ¡ã奜ãã§ãã virtualenv
ãçŸåšã®ã·ã¹ãã ã§æ©èœããªãã©ãããŒãäœæããå Žåãå®å
šã«å€±æããªãå Žåã§ããå°ãªããšããŠãŒã¶ãŒã«èŠåã衚瀺ããå¿
èŠããããŸãã
virtualenvããã®ç¶æ³ãã©ã®ããã«æ€åºã§ãããã¯æããã§ã¯ãããŸããã CããããŒã®å€ãæ£ç¢ºã«äœ¿çšããããšã¯ã§ããŸããããŸãããã®å¶éã®ããã·ã¹ãã äžã«ããããšãã©ã®ããã«æ€åºãããããããŸããïŒWindowsã«ã¯ãããŸããããOSXã§ããïŒïŒ
ãã®åé¡ã¯ãvirtualenvã®åé¡ã§ã¯ãªããOSã®å¶éãšããŠã¯ããŒãºããåŸåããããŸãã
ããã䟡å€ããããã®ã«ã€ããŠã¯ãããã€ãã®èã...
ctypes
ã¯ãããè¡ãããšãã§ããŸããïŒ# on Linux, BINPRM_BUF_SIZE == 128, giving us a maximum shebang length of 127
# 2 bytes for #!, 11 bytes for '/bin/python' leaves us with 114
if sys.platform() == 'Linux' and len(home_dir) > 114:
log.warn("bin/activate may not work your system, as the length of the shebang line will exceed 128 characters")
ç§ãææ¡ããå€æŽã¯ãä»ã®ãŠãŒã¶ãŒã«ãåã°ãããšæããŸãã ã³ã¡ã³ãã®ããã«ãããéãããŸãŸã«ããŠãPRãåºæ¿ããããšã¯ã§ããŸããïŒ @jantmanãš@pfmooreã«æè¬ã
BINPRM_BUF_SIZE
ã¯ã«ãŒãã«ããããŒã§å®çŸ©ãããŠãããå°æ°ã®ã«ãŒãã«é¢æ°ã§ã®ã¿äœ¿çšãããŠããããã§ãã ãããããã°ã©ã ã§æ€åºããæ¹æ³ã¯ãªããšæããŸãïŒããããŒãèªã¿åãããšã¯ã§ããŸããããå®çŸå¯èœæ§ã¯ã»ãšãã©ãããŸããïŒã
ããã¯èšã£ãŠããããã¯ããã«ã¯å€æŽãããªããšæ³å®ããã®ã劥åœã ãšæããŸãïŒããã«æ倧ã·ãã³é·ã®æŠèŠãããexecveïŒ2ïŒã®ããã¥ã¢ã«ããŒãžã®ãã¡ã¢ãã»ã¯ã·ã§ã³ã«ãæ確ã«èšèŒãããŠããããïŒïŒå®è¡å¯èœã·ã§ã«ã¹ã¯ãªããã®æåã®è¡ã«ã¯æ倧127æåã®è¡é·ãèš±å¯ãããŠããŸãããšèšèŒãããŠããŸãã
ãã¹ãŠã®POSIXæºæ ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ã¯äœããã®å¶éããããšæããŸãããäžéšã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãç¹ã«BSDããªã¢ã³ãã«ã¯ã8,000æå以äžã®å¶éãããããã§ãã
äžèšã®ææ¡ã®ããã«åçŽã«ããŒãã³ãŒãã£ã³ã°ããã®ã¯åççãªè§£æ±ºçã®ããã«æããŸããïŒãã©ãããã©ãŒã ãLinuxã§ãè¡ã127æåããé·ãå ŽåïŒãããã¯é床ã«ç²éã§å ·äœçã§æè»æ§ããªãããã«æããŸãã
virtualenv
ããŸããªãŒããŒããããè¿œå ããªãæ¹æ³ã§ããããããã°ã©ã ã§ãã¹ãããæ¹æ³ã«ã€ããŠã¯ãŸã èããŠããŸãïŒãã¡ãããããã¯venvã®äœææã«ã®ã¿ãã¹ãããå¿
èŠãããã®ã§ãç§ã¯ ' dããçšåºŠã®ãªãŒããŒãããã蚱容ã§ãããšæ³å®ããŸãïŒã
ç¹å®ã®ãã¹ã蚱容å¯èœãªã·ãã³ã®é·ãã§ãããã©ããããã¹ãããããã®ç°¡åãªæŠå¿µå®èšŒã³ãŒããããã€ããããŸããããã¡ã€ã«ããã£ã¹ã¯ã«æžãåºããŠãããã¡ã€ã«ãå®è¡ããŠåºåããã£ããã£ãããããããªãéãã§ãã äŸãšåºåã¯æ¬¡ã®ãšããã§ãïŒ https ïŒ
ç§ã¯ãããå€ãšåŒã¶å¿ èŠããããŸãããç§ã¯ããã«æ»ã£ãŠã¿ãããšæããŸãã ä»ã®LinuxãŠãŒã¶ãŒããŸãã¯åæ§ã®å¶éããããã©ããã確èªã§ããä»ã®OSã®ãŠãŒã¶ãŒã®æèŠãããã ããã°å¹žãã§ãã
å¶éã«ã€ããŠæšæž¬ãããããªããªãããŒãªããšãããããšãã代ããã«ãæ©èœãã¹ãã®bashã¹ã¯ãªãããäœæããŠã¿ãŸãããïŒ Pythonãæ£ããåŒã³åºãããã°ããã¹ãŠãæ¡è²ã«ãªããŸããããã§ãªãå Žåã¯ããã§ã¯ãããŸããã
ç¹°ãè¿ããŸããïŒ
setuptools
ãšdistlib
éä¿¡ããŠãã ãããã³ãŒãã¯virtualenvãŸãã¯pipã«ãããŸãããvirtualenvã®åé¡ã§ã¯ãªãããããã®åé¡ã解決ããŸãïŒé·ããã£ã¬ã¯ããªåã«å®å šãªPythonã€ã³ã¿ãŒããªã¿ãŒãã€ã³ã¹ããŒã«ããããšã§åãå¹æãåŸãããšãã§ããŸãïŒã
ãã®åé¡ãçºçããŸããã
PATHããPythonã䜿çšããŠã¿ãŸãããïŒ virtualenvã¯ããã§ã«bindirãåã«ä»ããŠããŸãã
#!/usr/bin/env python
virtualenvã¯ãã§ã«bindirãåã«ä»ããŠããŸã
virtualenvãã¢ã¯ãã£ãåããå Žåã®ã¿ã Virtualenvã¯ãã¢ã¯ãã£ããŒã·ã§ã³ãªãã§ã®äœ¿çšããµããŒãããŠããŸãã
誰ãããããæ··ä¹±ããããšæããªãïŒ
ãã®åé¡ã®åé¿çã¯ãpipãçŽæ¥å®è¡ããã®ã§ã¯ãªããvirtualenvã®pythonã€ã³ã¿ãŒããªã¿ãŒãå®è¡ããå®è¡ãããœãŒã¹ãšããŠpipã¹ã¯ãªãããpythonã«æž¡ãããšã§ãã
ãã®ä»£ããã®æ段pip install -r requirements.txt
DO python -m pip install -r requirements.txt
æãåèã«ãªãã³ã¡ã³ã
誰ãããããæ··ä¹±ããããšæããªãïŒ
ãã®ä»£ããã®æ段
pip install -r requirements.txt
DOpython -m pip install -r requirements.txt