--process-dependency-links
ã¯ããã©ã°ã®æå¹ãªãŠãŒã¹ã±ãŒã¹ãå€æ°ããããããã°ããåã«pipã«å床远å ãããŸããïŒ https ïŒ
ãã®ãããPEP 508/440ã®å®è£
ãpipã«ãªããŸã§ãããããéæšå¥šã§ã¯ãªãã¯ãã§ãã setuptoolsã®setup
ã«å¯Ÿããdependency_links
åŒæ°ãææžåãããŠãããéæšå¥šã§ã¯ãããŸããïŒ http ïŒ//setuptools.readthedocs.io/en/latest/setuptools.html#dependencies -that-aren-t- in-pypi
$ pip install request --process-dependency-links
Collecting request
Downloading request-0.0.12.tar.gz
DEPRECATION: Dependency Links processing has been deprecated and will be removed in a future release.
...
åæããŸããã äŸåé¢ä¿ãªã³ã¯ã®pipã®çŸåšã®åäœã¯ãæ¬åœã«ã²ã©ããã®ã§ãã
[ïŒ3939ã«æžã蟌ã¿ãã³ã¡ã³ããããã«ç§»å]
ãããã£ãŠãäž»ãªåé¡ã¯æ¬¡ã®ãšããã§ãã
requirements.txt
ãã¡ã€ã«ã䜿çšããããªãå ŽåïŒããšãã°ããã¹ãŠsetup.cfg
æå®ããã宣èšåã®äŸåé¢ä¿ãå¿ èŠãªããïŒãã©ã®ããã«æå®ããå¿ èŠããããŸããäŸåé¢ä¿ãšããŠã®URLïŒããã¯æ©èœããŸããïŒ
[options] install_requires = requests==2.18.4 https://github.com/example/example_lib/archive/master.zip
ãŸããäŸåé¢ä¿ã®ãªã³ã¯ã¯å¥åŠã§åé€ããŠãåé¡ãªããšæããŸãããæšæºçã«ããããã®ãŠãŒã¹ã±ãŒã¹ããªãå Žåããã®ãŠãŒã¹ã±ãŒã¹ã¯ã©ã®ããã«æäŸãããŸããïŒ
ãã1ã€ã®åé¡ã¯ã dependency_links
ãsetup.cfgã§æå®ã§ãããsetup.pyåŒæ°ãšããŠã®ã¿æå®ã§ããããšã§ãã ããããéæšå¥šã«ãªããªãå Žåã¯ãä¿®æ£ããå¿
èŠããããŸãã
ããã«é¢ãããã¥ãŒã¹ã¯ãããŸããïŒ é²è¡äžã®ä»£æ¿æ段ã¯ãããŸããïŒ äŸåé¢ä¿_links_ã¯ãã©ã€ãã©ãªã®å éš/ãã©ã€ããŒãé åžã®å¯äžã®ãªãã·ã§ã³ã®ããã§ãã
éæšå¥šã«ããã®ã§ã¯ãªããä¿®æ£ããå¿ èŠããããŸããå€ãã®äººã¯ãã©ã€ãã©ãªã®ååããŒãžã§ã³ãinstall_requiresã«é 眮ããããšãšãtarbalãšeggãå«ãäŸåé¢ä¿ãªã³ã¯ã®äž¡æ¹ãå¿ããŠãããããå¿ãããæ··ä¹±ãããããŸãã å¥ã®æ¹æ³ãšããŠã @ jleclancheããinstall_requireså ã®tarballãžã®ç°¡åãªãªã³ã¯ïŒåµãæå®ããããšã¯ãªãã·ã§ã³ã§ããå¯èœæ§ããããŸãïŒãææ¡ããŠããããšã確èªããããš
ç§ãã¡ã¯äžäººã§ã¯ãªããšæããŸãïŒ https ïŒ
devpiã®ãããª
@dstufft btw-devpiã®ååšã¯ãäŸåé¢ä¿ãªã³ã¯ãäžèŠã«ããåé¡ã«å¯Ÿããããã¯ãªãŒã³ãªè§£æ±ºçã瀺ããŠãããšäž»åŒµããããšæããŸã
IMHOã€ã³ããã¯ã¹ã®ç¶æ¿+ãã¯ã€ããªã¹ã/ãã©ãã¯ãªã¹ãã¯ãéçšã¬ãã«ã§ããäžè²«æ§ããããããç解ãããããã®ã§ã
@RonnyPfannschmidt ãææ¡ã«æè¬ããŸããç§ã¯éèŠãªäœããèŠéããŠããããã§ãïŒãã®éæšå¥šã«ã€ããŠã®è°è«ã¯é·ãããŸãïŒããäžè¬çã«èšãã°ã redditããã®ãã®ã³ã¡ã³ãã«ãã以äžåæããããšã¯ã§ããŸããïŒ
devpiã¯è§£æ±ºçã«ãªãå¯èœæ§ããããŸãããã¡ã³ããã³ã¹ãå¿ èŠãªå¥ã®ãµãŒãã¹ãã²ãŒã ã«å°å ¥ãã管çè ãã»ããã¢ããããã®ãåŸ ããªããã°ãªããªãã®ã§ãããã«äœæ¥ãéå§ããããšã¯ã§ããŸããã ãŸããããã±ãŒãžããã«ãããŠããdevipã«é 眮ããå¿ èŠããããŸãïŒãŸãã¯devpiã«gitãªããžããªã远跡ããæ©èœããããŸãã??ïŒ
çæ³çã«ã¯ãã©ã€ãã©ãªã«ãã¡ã€ã«ãè¿œå ããããsetup.pyã«æ°è¡è¿œå ããã ãã®ä»£æ¿æ段ãå¿ èŠã§ãã
ç§ã¯åºæ¬çã«ãããåé€ãããšããæ ¹æ¬çãªæ±ºå®ãç解ããŠããŸããããããã©ã®ããã«æªãæ £è¡ãäžå®ã«ã€ãªããå¯èœæ§ããããã¯ããããŸããããããå éšäœ¿çšã®ããã«ä¿æãããŠããéããããã¯å€§ããªåé¡ã§ã¯ãªãã¯ãã§ãã
@pfmoore @dstufftãèããŸããïŒ
https://github.com/pypa/pip/pull/4175/commits/86b07792e7ae762beeaeb471ab9db87e31bc285dã¯ã @
æ§æãäŸåé¢ä¿ã«äœ¿çšã§ããªãããšãæå³ããŠãããšæã£ãã®ã§ãããã¯ïŒ4175ããã®åé¡ã®è§£æ±ºçã§ã¯ãªãããšãæå³ããŸãã ããã«ããã³ã¡ã³ãã¯ãPyPIãããã䜿çšããã¢ããããŒãããããã¯ã§ããããã«ãªããŸã§äŸåé¢ä¿ã®@
ãµããŒããå®è£
ãã¹ãã§ã¯ãªããšãããã®ã§ããïŒPyPIããäœããã€ã³ã¹ããŒã«ããŠä»»æã®URLããäœããååŸã§ããããã«ããããªãããïŒ ãããããïŒã
代æ¿æ段ãã€ãŸãPEP 508ãµããŒããå°å ¥ããããŸã§ãéæšå¥šã«ããªãã§ãã ããã ãããŸã§ã¯ãããŸãã«ãå€ãã®äººã䜿ã£ãŠããŸãã
ãã®ããã®é©åãªã¯ãŒã¯ãããŒã¯äœã§ããïŒ
æ©èœãè¿œå ããå¿ èŠã®ããã©ã€ãã©ãªããããšããŸãããã Githubã§ãã©ãŒã¯ããŸãã æ©èœã¯ããã«ããŒãžãããäºå®ã¯ãªãã®ã§ãPyPiã®ä»£ããã«Githubãã©ãŒã¯ã䜿çšããããã«èšå®ããããŒã«ããããŸãã
ããã§ãpipã䜿çšããŠããŒã«ãã€ã³ã¹ããŒã«ãããšãã«ããã¹ãŠã®ãŠãŒã¶ãŒã--process-dependency-linksãè¿œå ããå¿ èŠããããŸããããã¯éæšå¥šã§ãããäžåºŠåé€ããããã©ã°ã§ãã
setup.pyã«æ¬ èœããŠãããªãã·ã§ã³ããããŸããããããšããããåé¿ããæ¹æ³ãæ¬åœã«ãããŸãããïŒ ãããè¡ãå¯äžã®å®è¡å¯èœãªæ¹æ³ã¯ããã©ãŒã¯ãããpypiããã±ãŒãžãããã·ã¥ããããšã§ããããã«æãããŸãã ãšã«ããããã«ãªã¯ãšã¹ããããŒãžããããšãããã¯ãŠãŒã¶ãŒã®æ··ä¹±ãå¢ãã ãã§ãã
ããã«æ¥ãŠã¿ãŸãããã
--process-dependency-links
ã¯ãä»æ¥ãå®éã«ã¯ä»£æ¿æ段ããããŸããã ãããã£ãŠãå
ã«é²ãã§éæšå¥šã«ããããšããå§ãããŸãã
ãã ãããã©ã°ã¯ãpipãä»»æã®URLã«å°éããããšãæå³ããŸããããã«ã€ããŠã¯ãèŠåãæ·»ä»ãããŠããå¿ èŠããããŸãã
@pradyunsgæ°žä¹ ã«ããã殺ãå®éã®èšç»ããªãéããç§ã¯ãã®ãŸã³ããäŒãŸããããåãé€ãããšã匷ããå§ãããŸã
ãããããããããç§ã¯ããªãã®åéãåŒãåããŸããããšèšããªãéããç§ã¯å®éã«ãããå¿ èŠãšãã人ã ãç¶æ³ãä¿®æ£ããã€ã³ã»ã³ãã£ããæã£ãŠãããšã¯æããªã
ãããã¡ã³ãããŒãšããŠã®ç§ã®æžå¿µã¯ããããããšã¯ã¹ããã€ãã®ãã¯ãã«ã«ãªãããšãèš±å¯ããªãããšã§ãã Pipã¯ããã©ã«ãã®ã€ã³ããã¯ã¹ãšããŠPyPIãæ³å®ããŠãããããPyPIã«ã¯æé»ã®ä¿¡é ŒããããŸãã ã ããç§ã®æåã®è³ªåã¯ïŒ
dependency_links
ã¡ã¿ããŒã¿ãæã€ããã±ãŒãžãPyPIã«ååšããŸããïŒdependency_links
ã®ãããžã§ã¯ãã®ã¢ããããŒããæåŠããããã«PyPIãå€æŽã§ããŸããïŒãŸãã¯ãã§ã«ããããŠããŸããïŒïŒæªæã®ããdependency_links
ãå«ãPyPIã®ããã±ãŒãžã«pipãŠãŒã¶ãŒãåãŸããæ¹æ³ããªããšç¢ºä¿¡ã§ããã°ãããã»ã©å¿é
ããå¿
èŠã¯ãããŸããã ã«ã¹ã¿ã ã€ã³ããã¯ã¹ã®äœ¿çšãéžæãããŠãŒã¶ãŒã¯ããããä¿¡é Œãããã©ãããèªåã§æ±ºå®ããå¿
èŠããããŸãã ïŒããã§ããã©ã°ãä¿æãããã®ã§ãããããã¯æœåšçã«ãªã¢ãŒããšã¯ã¹ããã€ãã§ãããåžžã«æ瀺çã«ãªããã€ã³ããå¿
èŠ
ãããã£ãŠã次ã®å€æŽããããŸãã
--process-dependency-links
ãã©ã°ã¯éæšå¥šã§ã¯ãããŸããããã«ã¹ã¿ã ã€ã³ããã¯ã¹ã«å¯ŸããŠã®ã¿æ©èœããŸãããããçŸç¶ãšããŠåãå ¥ããŠã倧äžå€«ã§ãã äŸåé¢ä¿ãªã³ã¯ã¹ã¿ã€ã«ã®æ©èœãå¿ èŠãªäººã¯ãïŒãããã£ããšããŠãïŒã©ã®ããã«åé²ãããããèªåãã¡ã®éã§ã¶ã¡å£ãããšãã§ããŸãã
誰ããæããªããäŸåé¢ä¿ãªã³ã¯ã®ã¡ã¿ããŒã¿ãå®çŸ©ããæšæºã«ããããã¹ãŠãå ¥ããããšãã§ããçŸåšã®éæšå¥šã¯ãæšæºã§æå®ãããåäœãåªå ããŠçŸåšã®åäœãåé€ããããã«ãªããŸãã ãããããããäžå¿ã®èŠ³ç¹ããã¯ãç§ã¯ããããããè¡ããããšæããŸã-äŸåé¢ä¿ã®ãªã³ã¯ãå¿ èŠãšãã人ã ã«æšæºåã®äœæ¥ãä»»ããŸãïŒçµå±ã®ãšããã圌ãã¯ã«ãŒããæã£ãŠããã®ã§ãããã¯åœŒãã®å©çã«ãªããŸã-æšæºçãªå€æŽãååŸããŸã-å®å šãªã³ãã¥ããã£ã³ã³ã»ã³ãµã¹ã§pipã®åäœãå€æŽããïŒã
åºæ¬çã«ãäŸåé¢ä¿ãªã³ã¯ã眮ãæããããšãç®çãšããæ©èœããããŸãããããã䜿çšããPyPIãžã®ã¢ããããŒãããããã¯ããæ¹æ³ããŸã ãªããããpipã¯ãŸã ãããå°éãå§ããŠããŸããã
ïŒ4175ã®ããšã§ããïŒ 86b0779ã®ããã«ãããã¯ãããŠããã®ã¯ã©ãã§ããïŒ ãã¶ãã httpsïŒ//github.com/pypa/pip/blob/master/src/pip/_internal/req/req_install.py#L167ãå€æŽããŠã comes_from
ãPyPIã®å Žåã«ã®ã¿ãšã©ãŒãåºãããšãã§ããŸããïŒ
次ã«ã --process-dependency-links
ã®éæšå¥šèŠåãå€æŽããŠããŠãŒã¶ãŒã@
æ§æã«åãæ¿ãã劥åœãªéæšå¥šæéã®åŸã«--process-dependency-links
ãåé€ããå¿
èŠãããããšã瀺ãããšãã§ããŸãïŒéå§ããå¿
èŠããããŸãïŒ @
æ§æã䜿çšå¯èœã«ãªã£ãæç¹ããã®ã¯ããã¯å»ã¿ïŒã
@pfmooreãããããã¯ãŸãã«ããã§ãããããã¯åé²ã®å¯èœæ§ã®ããéã®ããã§ãã
ããã£ãã 誰ãæåã«ããã«å°éããªãå Žåãç§ã¯PRãæžãããšã«ã€ããŠèŠãã§ãããã
ç§ãåéãããã®ãããããã§ã®ãŠãŒã¶ãŒã®åé¡ã¯ã代æ¿æ段ããªãæ©èœã®ããã«ãããæž¡ããšãã«ãããããç§ã¯éæšå¥šã§ãããšæ瀺çã«èšããªãã·ã§ã³ãæž¡ãå¿ èŠããããšããããšã§ãã
éæšå¥šæéäžãdependency_linksã®ãµããŒããå®å šã«å»æ¢ããããšã«è³æã§ãã ãããŸã§ã®éãPEP 508 URLäŸåé¢ä¿ã®ãµããŒããè¿œå ããŸããããã¯ãpipã䜿çšãããšãã¯ãŸã 倧é³éã§ããããªããã€ã³ã§ããå¿ èŠããããšæããŸãã
ã€ãŸãã次ã®ããšãæå³ããŸãã
ç§ã¯æšæ¥ãããã¿ã€ãããŸãããããããéããŸããã§ããã @pfmooreã®æåŸã®ã³ã¡ã³ããšåºæ¬çã«åãã ãš
ããŒãïŒ
URLéšéã¯ãªããã€ã³ãã©ã°ãå¿ èŠãšããŸããïŒ PEP 508ã¯ããã¯èšã£ãŠããããçŸåšã®å®è£ ã¯ããããŠããŸããã è«çã¯ããããŸãããã»ãã¥ãªãã£ãšäœ¿ããããã®è³ªåã«ã€ããŠã®ç§ã®å€æã¯ä¿¡çšã§ããŸããã
ãŸããåãæ¿ããéå§ããåã«ããããžã§ã¯ããäŸåé¢ä¿ãªã³ã¯ãã@æ§æã«åãæ¿ããæ¹æ³ã«é¢ããæ確ãªããã¥ã¡ã³ãã確èªããããšæããŸãã éæšå¥šã®åœ±é¿ãåãã人ã ã«é£çµ¡ããããšã¯ãã§ã«ååã«å°é£ã§ããã察åŠæ¹æ³ãç解ã§ããªããšããèŠåã¯åœ¹ã«ç«ã¡ãŸããã çæ³çã«ã¯ãèŠåã«ã¯ãåãæ¿ãæ¹æ³ãããã¥ã¡ã³ãã§ããIMOãžã®ãã€ã³ã¿ãå«ãŸããŠããå¿ èŠããããŸãã
ã»ãã¥ãªãã£ãšäœ¿ããããã®è³ªåã«ã€ããŠã®ç§ã®å€æãä¿¡çšããŠããŸããã
ç§ã¯ãããã©ã«ãã§å®å šã§ããããšããåŸåããããå®å šæ§ã®äœãåäœããªããã€ã³ããŸãã
ã¹ã€ããã®ããã·ã¥ãéå§ããåã«ããããžã§ã¯ããäŸåé¢ä¿ãªã³ã¯ãã@æ§æã«åãæ¿ããæ¹æ³ã«é¢ããæ確ãªããã¥ã¡ã³ã
ç§ã«ã¯ããã§ããã
ç§ã¯ãããã©ã«ãã§å®å šã§ããããšããåŸåããããå®å šæ§ã®äœãåäœããªããã€ã³ããŸãã
ç§ã®ä»äºã§ãã¡ã€ã¢ãŠã©ãŒã«ãšã»ãã¥ãªãã£ã®å¶çŽã«å¯ŸåŠããã®ã«èŠåŽããŠãã人ãšããŠãç§ãã¡ã¯ãã®æ©èœãæã圹ç«ã€ãšæãããç°å¢ã®çš®é¡ïŒå éšéçºãã¯ããŒãºããœãŒã¹ïŒã«ã€ããŠããŸãç解ããŠããªãããšãããç¥ã£ãŠããŸããå³å¯ã«å¶åŸ¡ãããã¯ãŒã¯ãããŒããããã¯ãŒã¯ã¬ã€ã¢ãŠããªã©ïŒã ãããã£ãŠãç§ã®åŸåã¯ãããã©ã«ãã®ã¯ãŒã¯ãããŒïŒPyPIïŒã«å¯ŸããŠå®å šã§ããããã¯ãŒã¯ãããŒã«ãšã£ãŠæããã«éèŠã§ãããã圌ããããªããã°ãªããªããã¬ãŒããªããé©åã«ç解ããŠããªããŠãŒã¹ã±ãŒã¹ãæã€äººã ã®éªéã«ãªããããªè¿œå ã®é害ã眮ããªãããšã§ããäœãã
ç§ã®èãã§ã¯ããããã±ãŒãžãæ瀺çã«äœ¿çšããããšãéžæãããµãŒããŒããã®ãã®ã§ããå Žåãã¯ãURLãªã³ã¯ãèš±å¯ããã®ã«ååãªãªããã€ã³ã§ãã
èŠãïŒ ç§ãæèŠã
ã¯ãŒã¯ãããŒã«ãšã£ãŠæããã«éèŠã§ãããã圌ããããªããã°ãªããªããã¬ãŒããªããé©åã«ç解ããŠããªããŠãŒã¹ã±ãŒã¹ãæã€äººã ã®éªéã«ãªããããªè¿œå ã®é害ã眮ããªãã§ãã ããã
ãã£ããã ã äžéšã®ãŠãŒã¶ãŒãã¯ãŒã¯ãããŒãžã®æŽå¯ãæäŸã§ããã°ãããã¯çŽ æŽãããããšã§ãã
ãããã±ãŒãžãæ瀺çã«äœ¿çšããããšãéžæãããµãŒããŒããã®ãã®ã§ããå Žåãã¯ãURLãªã³ã¯ãèš±å¯ããã®ã«ååãªãªããã€ã³ã§ãã
ããã¯ããããããŸããã ïŒ/
èŠãïŒ æèŠããªãããã§ã¯ãªããèªåã®åèŠãè¡šããŠããªããã©ããããããªãã ãã§ãð
ããã
ãã£ããã ã äžéšã®ãŠãŒã¶ãŒãã¯ãŒã¯ãããŒãžã®æŽå¯ãæäŸã§ããã°ãããã¯çŽ æŽãããããšã§ãã
ç§ã®èãã§ã¯ããããã±ãŒãžãæ瀺çã«äœ¿çšããããšãéžæãããµãŒããŒããã®ãã®ã§ããå Žåãã¯ãURLãªã³ã¯ãèš±å¯ããã®ã«ååãªãªããã€ã³ã§ãã
GitHubããã®ãœãŒã¹ãèš±å¯ããã ãã§ãåé¡ã®99ïŒ ã解決ããŸãã ã¢ããã¹ããªãŒã ããã±ãŒãžã«ã¯ãã°ãŸãã¯äžè¶³ããŠããæ©èœããããŸãã ç§ã¯ãããããã©ãŒã¯ããŠä¿®æ£ããPRãçºè¡ããŠãããããããããŒãžãããŠPyPIã§ãªãªãŒã¹ããããŸã§ãããããéåžžã«é·ãæéåŸ ã¡ãŸãã ãããŸã§ã®éãç§ã®ããã±ãŒãžã¯ãããã®ããã±ãŒãžã®ä¿®æ£ã«äŸåããŠããŸãã
ããã¯ã1è¡ã§å®è¡ã§ããéãããªããã€ã³ã§ããŸãã
çŽæ¥ãªã³ã¯ïŒHTTPSãªã©ãæ³å®ïŒã䜿çšããããšã¯å®éã«ã¯ã»ãã¥ãªãã£ã®åé¡ã§ã¯ãªããåãªãå¯çšæ§ã®åé¡ã§ãã PyPIããã®ããããçŠæ¢ããŠããã®ã§ãããã§ååã§ãããå¥ã®ãã©ã°ã¯å¿ èŠãããŸããã
ç§ã®ä»äºã§ã¯ã @ pfmooreãèšåããããã€ãã®ãŠãŒã¹ã±ãŒã¹ãã€ãŸããããã±ãŒãžããªãŒãã³ãœãŒã¹ãã¯ããŒãºããœãŒã¹ã«ãªãåã®å
éšéçºãªã©ã«è©²åœããŸãïŒåžžã«å
éšããã±ãŒãžã¯ä»ã®å
éšããã±ãŒãžã«äŸåãããããã¯ãã¹ãŠããŒãžã§ã³ç®¡çãµãŒããŒã«ãããŸãïŒ ïŒã
ãã ãããã¡ã€ã«ã·ã¹ãã ã®å Žæãåç
§ããŠãã人ã®äœ¿çšäŸããããŸã...
ãã¯ã€ããªã¹ãã«ç»é²ããããã¹ã/å Žæã®ãªã¹ããæäŸããããšã¯çã«ããªã£ãŠããŸããïŒ ãã©ã°ã®ååã¯ã @ pradyunsgã瀺åããŠããããã«ãIMOããé¢é£ãããªã¹ã¯ããŠãŒã¶ãŒã«èªèãããã®ã«ååãªèª¬æçã§ããå¿
èŠããããŸãã å€å--whitelisted-host
ïŒ
@masdeseiscaracteres誀解ãããŠãããããããŸãã-ããã±ãŒãžãPyPIããååŸãããå Žåããã®äŸåé¢ä¿ã®ããããã@
åç
§ãä»ããŠæå®ãããå Žåã倱æããããšã瀺åããŠããŸããã ãããããšã«ããPyPIã§ãã®ãããªã±ãŒã¹ãçºçããããšã¯ãªãã¯ãã§ãïŒããæç¹ã§ããããæåŠããããšãæåŸ
ããŠããŸããããŸã èšå®ã§ããŠããŸããïŒã @
åç
§ã®ä»ã®ãã¹ãŠã®äœ¿çšã¯OKã§ãã
ç§ãã¡ã@pfmooreã«ãã£ãŠèšè¿°ãããŠãããã®ãªãPRãé²ããã€ããã ããã«èŠããŸãhttps://github.com/pypa/pip/issues/4187#issuecomment -389846189ã
PRã¯å€§æè¿ã§ãã :)
ç§ã¯ããã«å°éããæéããªãã£ãããšã«æ³šæããŠãã ãã-å€æŽãé£ããããã§ã¯ãªãïŒåè¿°ã®ããã«ãããã¯åã«comes_from
ã«å¯Ÿãããã§ãã¯ã§ããããã«èŠããŸãïŒããããç§ãæçºããæ¹æ³ãããããªãããã§ãèªåã§ãšã©ãŒãèµ·ãããŸãïŒããã«éèŠãªã®ã¯ããããããã¹ãã®æžãæ¹ãããããŸããïŒã 誰ãããã®ãããªãã¹ãã±ãŒã¹ã®äŸãæäŸã§ããã°ãããã¯éåžžã«åœ¹ã«ç«ã¡ãŸãã
誰ãããã®ãããªãã¹ãã±ãŒã¹ã®äŸãæäŸã§ããã°ãããã¯éåžžã«åœ¹ã«ç«ã¡ãŸãã
ãããå®èšŒããæ¢åã®ãã¹ãtest_install_pep508_with_url_in_install_requires
ããããŸãã
PyPIããã€ã³ã¹ããŒã«ããéã®ãšã©ãŒã«ã€ããŠã¯ãURLèŠä»¶ã®ãããã®ãPyPIã«å®éã«ã¢ããããŒããããããè¯ããªãã·ã§ã³ã¯ãããŸããã ðãã®ç®çã®ããã«PyPIã«ããã±ãŒãžãã¢ããããŒãããŸããã https://pypi.org/project/pep-508-url-deps/
ãã1ã€ã¯ã comes_from
ã¯URLãŸãã¯ãã¹ã§ã¯ãªãã 'box==0.1.0 from file:///private/tmp/box'
è¡ã«æ²¿ã£ãæååã§ãã ãã®åé¡ãä¿®æ£ããããšããŠãã人ã¯èª°ã§ããããã±ãŒãžã®åºæã«é¢ããæ
å ±ãå
¥æã§ããããã«ããšã©ãŒãçºçãããããã®ããè¯ãæ¹æ³ãèŠã€ãåºãå¿
èŠããããŸãã :)
@pfmooreãã®åé¡ã¯ç§ã®å¿ã®è¿ãã«ãããŸãð@ pradyunsgã®ã¢ããããŒãã¯ããªãã«å¿ èŠãªãã®ãæäŸããŸããããããŠããªãã¯ãŸã ããã«åãçµãããšãèšç»ããŠããŸããïŒ ããã§ãªããã°ãç§ã¯ããã§ã¹ã€ã³ã°ããããšãã§ããŸãã
@bstrdsmkrãããã @ pradyunsgãèšãããã«ã comes_from
ã¯ãœãŒã¹URLã§ã¯ãªããããæã£ãã»ã©åçŽã§ã¯ãããŸããã ã§ãããããã€æéããããããããŸããïŒç§ã¯ãã®æ©èœãå人çã«äœ¿çšããŠããªãã®ã§ãåªå
é äœãªã¹ãã®äžäœã«ã¯ãããŸããïŒã
äžèšã®ããã«ãPRã¯æè¿ããŸã:-)
ã¢ããããŒããããããã±ãŒãžã¯å®è£ ã«ã¯ãŸã£ãã圹ç«ã¡ãŸãããæ©èœã®ãã¹ãã«ã®ã¿åœ¹ç«ã¡ãŸãã
ç§ã®ç解ã§ã¯ãå¿ èŠãªä¿®æ£ã¯æ¬¡ã®ãããªãã®ã§ãã
if req.url and is_like(req.url, PYPI.url):
raise
https://github.com/pypa/pip/blob/master/src/pip/_internal/req/req_install.py#L172ã§
ããã§ãURLãåããã¡ã€ã³ã«ããå Žåã is_like()
ã¯True
è¿ããŸãã ããã¯æ£ããã§ããïŒ
ããã ããæããŸãã ãããã³ãŒãã®å€æŽã«ãªããŸãã
ãŸãããã¹ããšNEWSãšã³ããªãè¿œå /æŽæ°ããå¿ èŠããããŸãã
ãŸãããã®å€æŽã¯ãããã¥ã¡ã³ããžã®ãªã³ã¯ãæäŸããéæšå¥šã¡ãã»ãŒãžãšã代æ¿æ段ã«åãæ¿ããæ¹æ³ããŠãŒã¶ãŒã¬ã€ãã«ç€ºãè¿œå ã»ã¯ã·ã§ã³ãä¿èšŒããã®ã«ååéèŠã ãšæããŸãã
ãããã¡ã³ãããŒãšããŠã®ç§ã®æžå¿µã¯ããããããšã¯ã¹ããã€ãã®ãã¯ãã«ã«ãªãããšãèš±å¯ããªãããšã§ãã Pipã¯ããã©ã«ãã®ã€ã³ããã¯ã¹ãšããŠPyPIãæ³å®ããŠãããããPyPIã«ã¯æé»ã®ä¿¡é ŒããããŸãã
ããããæ確ãªä¿¡é ŒããããŸãã ãŸããäŸåé¢ä¿ã§å€éšãœãŒã¹ã䜿çšããªãããã«ããããã®ã»ãŒãã¬ãŒããè¿œå ããŠããç¶æ³ã¯æ¹åãããŸãããå ¬éãããŠããVCSãããpypiã§ãã«ãŠã§ã¢ãé ãæ¹ã䟿å©ã§ãã
IMHOã®ããè¯ãã¢ãããŒãã¯ãéçºè ã®VCSããã©ã€ããªãœãŒã¹ãšããŠäœ¿çšããpypyãããããæãã¬ãžã¹ããªãšããŠä¿æããVCSã®ã³ã³ãã³ããpypyããååŸãããã®ãšåäžã§ããããšã瀺ã匷åãªæå·å蚌æãåãããã£ãã·ã³ã°ãããã·ãä¿æããããšã§ãã ã€ãŸã
0ç»é²
dev -- public key --> pypa
1ã¢ããããŒã
setuptools -- git+https:/.... --> pypa
pypi --> Tor --> give me that commit --> vcs
pypi <-- Tor <-- here -- vcs
pypi checks the signature matches the dev
2ã¢ã€ãã«ïŒ
pypi --> Tor --> give me that commit --> vcs
pypi <-- Tor <-- here -- vcs
pypi checks it
2ååŸ
flips a coin
if coin == 1:
pip -- give me package git+https:/... --> pypi
pip <-- signature || content -- pypi
pip -- give me the signature --> vcs
pip <-- signature -- vcs
else:
pip -- give signature of package git+https:/... --> pypi
pip <- signature -- pypi
pip --> Tor --> give me that commit --> vcs
pip <-- Tor <-- here -- vcs
pip checks if the signature matches the public key and signature from pypa
pip -- give me public key --> keyserver
pip <-- PK -- keyserver
pip checks signature given by VCS against the sdist given by pypy
pip caches public key and repo location
1ã·ã°ããã£ã«ãããã€ã³ã¹ããŒã«ããããœãŒã¹ã¯VCSã®ãœãŒã¹ãšäžèŽããŸã
2äœè
ãäžèŽããŸã
3 pypaã¯æ°ãããŠãŒã¶ãŒãšäžæ£è¡çºãè¡ãããšãã§ããŸãããå€ããŠãŒã¶ãŒã¯äžæ£è¡çºãæ€åºããå¯èœæ§ããããŸã
4äœæè
ã¯ãpypyã«äžãããã以å€ã®Webã€ã³ã¿ãŒãã§ã€ã¹ãã©ã³ãã«è¡šç€ºããŠããŒãããpypyã«å¥ã®ãã©ã³ããéä¿¡ã§ããŸãã ãã©ã³ããURIã®å¿
é éšåã«ãããšãããŸãæ©èœããŸããã
@KOLANICH pypy / pypaãšã¯ãPyPIïŒPython Packaging IndexïŒã®ããšã ãšæããŸãã PyPyã¯Pythonã®ä»£æ¿å®è£ ã§ãã PyPAïŒPython Packaging AuthorityïŒã¯ãPythonPackagingã¹ããŒã¹ã§äž»èŠãªãããžã§ã¯ããç¶æããŠãããã©ã³ãã£ã¢ã®ã°ã«ãŒãã§ãã é åèªãæ£ããååŸãããã䜿çšãæ§ããŠãã ããã
ããªãã¯ãæ¢åã®ååã«ç¢ºç«ããããµãŒãã¹ã®èšèšãæ ¹æ¬çã«å€æŽããããšãææ¡ããŠããŸãã ãã®ãããªå€§ããªå€æŽãåžæããå Žåã¯ãã¢ãŒããã¯ãã£ã管ç/å€æŽããŠæ¢åã®ã¯ãŒã¯ãããŒã®ç§»è¡/äžæãæå°éã«æããããã«ãå°ãªããšãïŒå®è¡å¯èœãªïŒç§»è¡èšç»ãšPOCå®è£ ãæäŸããããšãæè¿ããŸãã å€éšãã¹ãã£ã³ã°ã«äŸåããããšã¯ãéå»ã«PEP 470ã§PyPIããæ瀺çã«åé€ããããã®ã§ãããããã¯ããªããææ¡ããŠãããã®ãšã¯ããªãç°ãªãã±ãŒã¹ã§ããããšã«æ³šæããŠãã ããã
PyPIã¯ãã©ã³ãã£ã¢ã«ãã£ãŠç¶æãããå¯ä»/åŸæŽãããã€ã³ãã©ã¹ãã©ã¯ãã£ã§å®è¡ãããŸãã ããªãã¯ãããå¥ã®ãã©ã³ãã£ã¢ãç¶æ/éå¶ããŠãããµãŒãã¹ã§ããTorãä»ããŠæ¥ç¶ããããšãææ¡ããŠããŸãã ãããã¯äž¡æ¹ãšãäž»èŠãªãããžã§ã¯ãã§ããããŠãŒã¶ãŒãçŽæ¥è² æ ãããããŠãŒã¶ãŒã«è¡šç€ºãããããããšã¯ãããŸããããå®è¡ãç¶æããããã®ã³ã¹ããããããŸãã
ããã§ããªããããã¯ãã®è°è«ã«ãµããããå Žæã§ã¯ãããŸããã PyPIã®åèšèšãææ¡ãããå Žåã¯ã httpsïŒ//github.com/pypa/warehouseã§ãã£ã¹ã«ãã·ã§ã³ãããçŽãããšããå§ãã
ææ¡ããããšãããããŸãã
ãããåŸã®ãªãªãŒã¹ã«ããã·ã¥ãããçç±ã«ã€ããŠã¯ãïŒ5571-ããã«é¢ããPRãåç §ããŠãã ããã
PIPã€ã³ã¹ããŒã«ãã°ã®èŠåã¯ãã®URLã瀺ããŸãããããã§ãä»ã®ãã±ããã§ãåé¡ã®è§£æ±ºçã¯ãããŸããã
ããã«ãããã¯ããã«æ··ä¹±ãæããŸããPyPIãšã¯ã©ãããæå³ã§ããïŒ PyPIã€ã³ã¿ãŒãã§ãŒã¹ïŒArtifactoryãªã©ïŒãå ·äœçã«ã¯pypi.orgãå®è£ ãããµãŒããŒãæå³ããŸããïŒ
ããŠãæããã«ã setuptools
ïŒå¥åsetup.py install
ïŒãšpip install
äž¡æ¹ã䜿çšããããã±ãŒãžã®ã€ã³ã¹ããŒã«ããµããŒãããã人ã¯ããã¯ã«ã¹ã«ãªããŸãã ãã®ç¶æ³ã§èª°ããè€æ°ã®çžäºäŸåããã±ãŒãžãåŠçããå¯äžã®æ¹æ³ã¯
ããŠãç§ãééã£ãŠããå Žåã¯èšæ£ããŠãã ããããããããããŸã§ã®ãšãããPyPAããµãŒããŒãžã®ã¢ããããŒãã«é¢ããŠè¡ã£ã決å®ã«åºã¥ããŠãããåãé€ãã°ãåºæ¬çã«ãArtifactoryãŠãŒã¶ãŒã«ãšã£ãŠpip
圹ã«ç«ããªããªããŸããçžäºã«äŸåããããã±ãŒãžãæã€ãã©ã€ããŒããªããžããªãæã£ãŠããäŒç€Ÿã
ç§ãééã£ãŠããŠããã®å šäœã®è©±ã®äžã§äœããéããããšãæããŠãã ããïŒç§ã¯ãã°ããããããªã³ãšãªãã§ãã©ããŒããŠããŸããïŒã ç§ã¯PEP508ãèµ€ãããŸãããããã®ç¹ã§ã¯å®éã«ã¯éãã¯ãããŸãããå°ãªããšãããããã©ã®ããã«ç¶æ³ãæ¹åãŸãã¯æªåããããã¯ããããŸããã
@ wvxvw-traiana PRïŒ5571ãéãããšæããŸã
ãã®PRã®åïŒããã³çŸåšã®ãªãªãŒã¹ã§ã¯-18.0ïŒãpipã¯PEP508æ§æã§æå®ãããäŸåé¢ä¿ã®ã€ã³ã¹ããŒã«ãæåŠããŸãã
ãã®åŸãPRïŒãã§ã«ããŒãžãããŠããã®ã§18.1以éã«ããã¯ãã§ãïŒpipã¯ããããã«äŸåããããã±ãŒãžãpypi.orgããã®ãã®ã§ããå Žåã«ã®ã¿ããã®ãããªäŸåé¢ä¿ãæåŠããŸãã
pypiããã®ãã®ã«äŸåãããã©ã€ããŒããªããžããªããããã±ãŒãžãã€ã³ã¹ããŒã«ããå Žåãæããã«ããã¯åé¡ãããŸããã
ãã©ã€ããŒããªããžããªããã®ãã®ã«äŸåããpypi.orgããããã±ãŒãžãã€ã³ã¹ããŒã«ãããšã倱æããŸãã
ãã©ã€ããŒããªããžããªå
ã®ãã®ã«äŸåããããã±ãŒãžããã©ã€ããŒããªããžããªããã€ã³ã¹ããŒã«ããå Žåãããã¯åé¡ãããŸããã
ãããç©äºãçä»ããã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸã
@bstrdsmkrããã¯åãèµ·æºã§ããããããšãpypiã¯ç¹å¥ãªå Žåã§ããïŒ ã€ãŸã
å¥ã®ãã©ã€ããŒããªããžããªããã®ãã®ã«äŸåãããã©ã€ããŒããªããžããªããããã±ãŒãžãã€ã³ã¹ããŒã«ããå Žåã
ãã®èåŸã«ããçç±ã«ã€ããŠããã«ã³ã³ããã¹ããè¿œå ããã«ã¯ïŒ
setuptoolsïŒå¥åsetup.py installã®å®è¡ïŒãšpip installã®äž¡æ¹ã䜿çšããããã±ãŒãžã®ã€ã³ã¹ããŒã«ããµããŒãããã人ã¯ãä»ããã¯ã«ã¹ã«ãªããŸãã
trueã®å Žåãããã¯setuptoolsãåæãããæšæºã§ããçŽæ¥URLãªã³ã¯ã®ãµããŒããå®è£ ããŠããªãããã§ãã 圌ããšäžç·ã«ãããèªç±ã«äžããŠãã ããã
å¥ã®ãã©ã€ããŒããªããžããªããã®ãã®ã«äŸåãããã©ã€ããŒããªããžããªããããã±ãŒãžãã€ã³ã¹ããŒã«ããå Žåã
ããã¯ããŸããããŸãã PyPIã¯é¢äžããŠããŸããã
OKãããã§ãäžæ¹ã§ããããç§ã«åœ±é¿ãäžããªãããšãå¬ããæããŸãã
äžæ¹ããã®ãä¿®æ£ãã¯ãã©ããã£ãŠããã眮ãã®ã...åé¿ããã®ã¯ç°¡åãããããã§ãã
echo "not-pypi 151.101.61.63" >> /etc/hosts
pip install --index-url not-pypi
ç§ã®ããžãã¹ã§ã¯ãããŸããããå®éã«ã¯è¡šé¢ã¬ãã«ã®ã¢ãããŒãã®ããã§ãã ïŒä»ã®æ»æãã¯ãã«ã¯ä»ã®ã³ã¡ã³ãã§èšåãããŠãããsetup.pyã§å¥œããªãã®ãç°¡åã«ããŠã³ããŒãã§ããŸãïŒã
ãŠãŒã¶ãŒããŠãŒã¶ãŒãåé¿ããã®ãé£ããããã«ã¯èšèšãããŠããŸããã ããã¯ãPyPIã«ã¯ãURLã«çŽæ¥äŸåããããã±ãŒãžã®ã¢ããããŒãããããã¯ããæ¹æ³ããŸã ãªããšããäºå®ã«å¯ŸããïŒéå®çãªïŒãœãªã¥ãŒã·ã§ã³ãæäŸããæ段ã§ãã ã³ã³ããã¹ãã«ã€ããŠã¯ã httpsïŒ //github.com/pypa/pip/pull/4175#issuecomment-266305694ãåç §ããŠ
@ dpwrussellpypi.orgã¯ç¹æ®ãªã±ãŒã¹ã§ãã ãã©ã€ããŒããªããžããªãããã©ã€ããŒããªããžããªãžã®å€æŽåŸã¯ãæ£åžžã«æ©èœããŸãã
@ wvxvw-traianaããã¯ããªããèªåã§ãããããã®ã劚ããããšãæå³ãããã®ã§ã¯ãããŸããã ããã¯ãpypi.orgããããã±ãŒãžãã€ã³ã¹ããŒã«ããŠããã ãã ãšæã£ããšãã«ãä»ã®èª°ããããªãã«ãããããªãããã«ããããšãç®çãšããŠããŸãã
çŸåšã®è°è«ãšã¯é¢ä¿ãªãããã®éæšå¥šã®èŠåãå®éã«æŽæ°ããŠããªãããããããåéããŸãã
ãããã èŠçŽãããŠãã ããïŒ
@pfmooreã¯ããããã®æ±ºå®ã®çç±ãããã§è©³ããhttps ïŒ
@pradyunsg setup.pyã®install_requires
ã§PEP 508 URLäŸåé¢ä¿ãèš±å¯ãããã®ã¯ãã€ã§ããïŒ æ¥ä»ã¯èšå®ãããŠããŸããïŒ
pipã®æ¬¡ã®ãªãªãŒã¹ã§ã¯ã10æã«äºå®ãããŠãã18.1ã§ãã pipã®3ãæã®ãªãªãŒã¹ãµã€ã¯ã«ã®è©³çŽ°ã«ã€ããŠã¯ãhttpsïŒ//pip.pypa.io/en/latest/development/release-process/ãåç §ããŠãã ããã :)
https://github.com/pypa/wheel/issues/249ã¯ãPEP 508ã®URLäŸåé¢ä¿ãå®è¡å¯èœãªä»£æ¿æ段ã«ãªãåã«ã察åŠããå¿ èŠããããŸãã
PEP 508ã®URLäŸåé¢ä¿ãå®è¡å¯èœãªä»£æ¿æ段ã«ãªãåã«ã pypa / WheelïŒ249ã«å¯ŸåŠããå¿ èŠããããŸãã
ããã¯è§£æ±ºãããŸããã
pip 18.1ãªãªãŒã¹ããŒãã«ã¯ã
PEP 508URLèŠä»¶ãäŸåé¢ä¿ãšããŠäœ¿çšã§ããããã«ããŸãã
ã»ãã¥ãªãã£å¯ŸçãšããŠãPyPIããããã±ãŒãžãã€ã³ã¹ããŒã«ãããšãã«ããããã®ããã±ãŒãžãPyPIã§ãã¹ããããŠããªãããã±ãŒãžã«äŸåããŠããå Žåãpipã¯äŸå€ãçºçãããŸãã å°æ¥çã«ã¯ãPyPIã¯ãã®ãããªå€éšURLäŸåé¢ä¿ãæã€ããã±ãŒãžã®çŽæ¥ã¢ããããŒãããããã¯ããŸãã ïŒïŒ4187ïŒ
ã€ãŸããããã¯åºæ¬çã«URLã䜿çšããŠäŸåé¢ä¿ãæå®ã§ããããšãæå³ããŸãããããããPyPI URLã§ãªãå Žåãããã±ãŒãžã¯pipã䜿çšããŠã€ã³ã¹ããŒã«ã§ããŸãããïŒ ãã¶ãç§ã¯ãããå®å šã«ééã£ãŠããŸãããURLã®äŸåé¢ä¿ã¯ã©ã®ããã«äœ¿çšãããããšã«ãªã£ãŠããŸããïŒ
PyPIã§ãã¹ããããŠãã@JarnoRFBããã±ãŒãžã¯ãURLã«äŸåããããšã¯ã§ããŸããã
PyPIã§ãã¹ããããŠããªãããã±ãŒãžã¯ãURLã«äŸåããå¯èœæ§ããããŸãã ããã±ãŒãžãgithubããçŽæ¥ã€ã³ã¹ããŒã«ããå ŽåïŒããšãã°ïŒãURLã®äŸåé¢ä¿ã解決ãããŠã€ã³ã¹ããŒã«ãããŸãã ãã®ãããªã€ã³ã¹ããŒã«ã®äŸïŒ
pip install git+https://github.com/bstrdsmkr/some_package.git
åºæ¬çã«ãURLããã€ã³ã¹ããŒã«ããå Žåã¯ãURLã«äŸåããå¯èœæ§ããããããã§ãªãå Žåã¯äŸåããŸããã ãŸããããããããããããã«ãURLãšéURLã®äž¡æ¹ã®äŸåé¢ä¿ãæã€ããšãã§ããŸã
ãã€ããŒãªè¿œå ïŒ
... URLããã€ã³ã¹ããŒã«ããå ŽåãURLã«äŸåããå¯èœæ§ããããŸã
... URLïŒVCSãªã©ïŒãããŒã«ã«ãã¡ã€ã«ããŸãã¯PyPIã§ã¯ãªãããã±ãŒãžã€ã³ããã¯ã¹ããã€ã³ã¹ããŒã«ããå Žåã¯ã...
ããã§ãäžèšã®èª¬æã«åŸã£ãŠinstall_requiresãåŠçããpipã®ããŒãžã§ã³ã¯ãããŸããïŒ æçµç¶æ
ã®äžã®ã¿ã°ãç解ããããšã¯ã§ããŸãããçŸåšã®pipããã¥ã¡ã³ãã¯ãsetuptoolsã®install_requires
ããã¥ã¡ã³ããæããŠãããããã§ãdependency_links
ã䜿çšããããã«æ瀺ãããŠããŸãã
èªåã§ããã¥ã¡ã³ãã«è©±ãããšã¯ã§ããŸããããPyPI以å€ã®ããã±ãŒãžãURLããäŸåé¢ä¿ãã€ã³ã¹ããŒã«ã§ããããã«ãããã®ãç·©åãã¯pip18.0ã§ãªãªãŒã¹ãããŸãã
AFAIKãinstall_requiresã®URLäŸåé¢ä¿ã¯ãpip18.1以éã§ãµããŒããããŠããŸãã
PEP 508URLèŠä»¶ãäŸåé¢ä¿ãšããŠäœ¿çšã§ããããã«ããŸãã
åºå žïŒãªãªãŒã¹ããŒã
ããŒããç§ã®åŽã®ã¿ã€ããã¹-
--process-dependency-linksã䜿ããã«äœããã¹ããã«ã€ããŠïŒç§ã®ããã«ïŒãã®åé¡ã«æåã«ééãã人ã ã®ããã«ãå°ãããªãããæåããäŸãããã«æ®ããããšæããŸãã ãã®ã¯ãŒã¯ãããŒã䜿çšããŠããŠãŒã¶ãŒã¯GitHubãŸãã¯ããŒã«ã«ãœãŒã¹ïŒPyPIã§ã¯ãªãïŒããpipã€ã³ã¹ããŒã«ãå®è¡ããããpipã€ã³ã¹ããŒã«requirements.txtãŸãã¯python setup.pyã€ã³ã¹ããŒã«ãå®è¡ããããpipã䜿çšããŠTravis-CIã§äœæ¥ãããã§ããããã«ãªããŸãããããŒãžã§ã³18以éãªã®ã§ãå€ãã®ããŒã¹ãã«ããŒããŠãããšæããŸãã ç§ã¯ããã誰ãã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãããããŠãããä»ã®äººã«ãšã£ãŠè©±é¡ããå€ããŠããããã«æããããªãã°ç§ã®è¬çœªïŒ
ããªãã®requirements.txtãã¡ã€ã«ã§ã人ã ãããã±ãŒãžãfooãã®GitHubdevãã©ã³ãã«äŸåã§ããããã«ããããšä»®å®ããŸããäŸïŒ
scipy>=0.17
matplotlib>=2.0
foo @ git+https://github.com/foo-organization/foo@dev#egg=foo-9999
setup.pyãã¡ã€ã«ïŒ
import os, sys
from setuptools import setup, find_packages
def read_requirements():
"""Parse requirements from requirements.txt."""
reqs_path = os.path.join('.', 'requirements.txt')
with open(reqs_path, 'r') as f:
requirements = [line.rstrip() for line in f]
return requirements
setup(
..., # Other stuff here
install_requires=read_requirements(),
)
install_requires
ãšrequirements.txt
ãæ··åããã®ã¯è³¢æã§ã¯ãªããšèšã人ãããŸãããªãªãŒã¹ãããããŒãžã§ã³ã«ã€ããŠã¯åæããŸãããããã¯éçºã«ã¯ããŸããããšæããŸãã
ããããã¡ããšã ãããã£ãŠãããã±ãŒãžãAããšãBãã®äž¡æ¹ããã®ã¡ãœããã䜿çšããããã±ãŒãžãAããäŸåé¢ä¿ãšããŠãBãããªã¹ãããŠããå ŽåããAããã€ã³ã¹ããŒã«ãããšãå®éã«ã¯ãBãã®requirements.txtãåŠçãããŸãã ïŒéåžžã¯ããã§ã¯ãããŸããïŒ-ããã§ããïŒ
ãŸããä»æãinstall_requiresèªäœãå°ãæªãããšãèªã¿ãŸããããããã®ã€ã³ã¹ããŒã«ã¯setuptoolsã«ãã£ãŠè¡ããããããpipãªãã·ã§ã³ã¯ç¡èŠãããŸãããããã®æ å ±ãå€ããªã£ãŠãããã©ããã¯ããããŸãã...
ãŸããä»æãinstall_requiresèªäœãå°ãæªãããšãèªã¿ãŸããããããã®ã€ã³ã¹ããŒã«ã¯setuptoolsã«ãã£ãŠè¡ããããããpipãªãã·ã§ã³ã¯ç¡èŠãããŸãããããã®æ å ±ãå€ããªã£ãŠãããã©ããã¯ããããŸãã...
install_requires
ãšsetup_requires
æ··åããŠããŸãã
ããããã¡ããšã ãããã£ãŠãããã±ãŒãžãAããšãBãã®äž¡æ¹ããã®ã¡ãœããã䜿çšããããã±ãŒãžãAããäŸåé¢ä¿ãšããŠãBãããªã¹ãããŠããå ŽåããAããã€ã³ã¹ããŒã«ãããšãå®éã«ã¯ãBãã®requirements.txtãåŠçãããŸãã ïŒéåžžã¯ããã§ã¯ãããŸããïŒ-ããã§ããïŒ
@stevebrasierã¯ãããããªããšæããŸããããã¯ãBãšã¯ç°ãªãããŒãžã§ã³ã®å¿ èŠãªããã±ãŒãžãAã«åºå®ããå Žåã«åé¡ã«ãªãå¯èœæ§ããããŸãã
ããã«ã¡ã¯çããããã®å Žåã®éæšå¥šã®çµè·¯ã¯çãããããšã«æ³šæããããšæããŸãã äŸåé¢ä¿ãªã³ã¯ã¯ããªãåããéæšå¥šãšããŠããŒã¯ãããŠããããšã¯ç¥ã£ãŠããŸããããããã眮ãæããããã«äœ¿çšã§ããPEP 508 URLã¯ã18.1ãŸã§å®è£ ãããŠããŸããã ãã®çµæãäŸåé¢ä¿ãªã³ã¯ããURLèŠä»¶ã«åãæ¿ãããŸã§ã®æéã¯ããã3ãæã§ãããããã¯ã倧èŠæš¡ãªãããžã§ã¯ãã§ã¯éåžžã«çãæéã§ãã
@rgerkinããã«ã¡ã¯ãç§ã¯ç¡é§ã«ããªãã®æ瀺ã«åŸãããšããŠããŸãã
PACKAGE @ git + sshïŒ//[email protected] ïŒOWNER / PACKAGEãæ€çŽ¢ããŠãgit @ BRANCH
https://pypi.org/simple/PACKAGE/ãèªã
'PACKAGE'ã®ã€ã³ããã¯ã¹ããŒãžãèŠã€ãããŸããã§ããïŒã¹ãã«ãééã£ãŠããå¯èœæ§ããããŸããïŒïŒ
ãã¹ãŠã®ããã±ãŒãžã®ã¹ãã£ã³ã€ã³ããã¯ã¹ïŒããã«ã¯æéããããå ŽåããããŸãïŒ
https://pypi.org/simple/ãèªã
PACKAGE @ git + sshïŒ//[email protected] ïŒOWNER / PACKAGEã git @ BRANCH ãããã¯install_requiresã«ãããŸãã
ãªãç§ãäžèšãååŸããŠããã®ãåãããŸããïŒ
@KevinMarsç§ã®äŸãšããªããæã£ãŠãããã®ãšã®éã«ã¯ãgit_sshãbitbucketãa.gitãµãã£ãã¯ã¹ãååä»ããã©ã³ãã®äœ¿çšãããŒãžã§ã³ã¿ã°ãªããªã©ãããã€ãã®éãããããŸãã ãã¶ãããããã®1ã€ä»¥äžããããªãã®URLã§ã¯ãªãPyPIã§æ€çŽ¢ããããã«pipãå°ããŠããŸãã ã©ã®ããŒãžã§ã³ã®pipã䜿çšããŠããŸããïŒ
çºèšã«ç§ãèŠã€ããããšãäœãïŒäœ¿çšããsetup.py
ã§ããã±ãŒãžãã€ã³ã¹ããŒã«ããããã«python setup.py install
ãŸã äžã«å€éšäŸåé¢ä¿ã®å®£èšãå¿
èŠãšdependency_links
ã
setup.pyãã¡ã€ã«ïŒ
import os, sys from setuptools import setup, find_packages def read_requirements(): """Parse requirements from requirements.txt.""" reqs_path = os.path.join('.', 'requirements.txt') with open(reqs_path, 'r') as f: requirements = [line.rstrip() for line in f] return requirements setup( ..., # Other stuff here install_requires=read_requirements(), )
@rgerkinãã®ãœãªã¥ãŒã·ã§ã³ãå ±æããŠããã ãããããšãããããŸãã ããããPythonããã±ãŒãžãã»ããã¢ããããããã«pbrã䜿çšããŠããå Žåã¯ã©ããªããŸããïŒ ãããpbrã«åãããæ¹æ³ã¯ïŒ
@KevinMarsç§ã¯ãŸã£ããåãåé¡ãæ±ããŠããŸãã ä¿®æ£ãç解ããããšããããŸããïŒ SSHçµç±ã§ãã©ã€ããŒãããããã±ãããªããžããªã®ç¹å®ã®ãã©ã³ããèŠæ±ããããšããŠããŸãã
--process-dependency-linksãããååšããªãããšã«æ°ã¥ããŸããã ã³ãã¥ããã£ã®ãã¹ãŠã®ä»äºã«æè¬ããŠããŸãã è°è«ãçµããããªããšãã決å®ãæ£åœåããããšããåé¡ã®è§£æ±ºãšãªãã€ã¬ã¯ãã®è¿·è·¯ãéžæããã解決çã§ããããããã§ããã®ãªãã·ã§ã³ãæ®ããŠã誰ã«ã害ã¯ãªãã£ããšæããŸãã
æãåèã«ãªãã³ã¡ã³ã
ãã®ããã®é©åãªã¯ãŒã¯ãããŒã¯äœã§ããïŒ
æ©èœãè¿œå ããå¿ èŠã®ããã©ã€ãã©ãªããããšããŸãããã Githubã§ãã©ãŒã¯ããŸãã æ©èœã¯ããã«ããŒãžãããäºå®ã¯ãªãã®ã§ãPyPiã®ä»£ããã«Githubãã©ãŒã¯ã䜿çšããããã«èšå®ããããŒã«ããããŸãã
ããã§ãpipã䜿çšããŠããŒã«ãã€ã³ã¹ããŒã«ãããšãã«ããã¹ãŠã®ãŠãŒã¶ãŒã--process-dependency-linksãè¿œå ããå¿ èŠããããŸããããã¯éæšå¥šã§ãããäžåºŠåé€ããããã©ã°ã§ãã
setup.pyã«æ¬ èœããŠãããªãã·ã§ã³ããããŸããããããšããããåé¿ããæ¹æ³ãæ¬åœã«ãããŸãããïŒ ãããè¡ãå¯äžã®å®è¡å¯èœãªæ¹æ³ã¯ããã©ãŒã¯ãããpypiããã±ãŒãžãããã·ã¥ããããšã§ããããã«æãããŸãã ãšã«ããããã«ãªã¯ãšã¹ããããŒãžããããšãããã¯ãŠãŒã¶ãŒã®æ··ä¹±ãå¢ãã ãã§ãã