Readthedocs.org: `pip install --no-deps`๊ฐ€ Sphinx autodoc์— ๋Œ€ํ•œ ์ข…์†์„ฑ์„ ์ถฉ์กฑํ•˜๋„๋ก ํ—ˆ์šฉ

์— ๋งŒ๋“  2019๋…„ 03์›” 20์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: readthedocs/readthedocs.org

์„ธ๋ถ€

๋ฌธ์ œ

๋‚ด Python ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ API ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Sphinx-autodoc ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์›๋ž˜ readthedocs์— ๋Œ€ํ•œ ์ „์ฒด ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด Conda๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ๋•Œ๋กœ๋Š” ์‹คํŒจํ•˜๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค(#4695). ๊ทธ๋ž˜์„œ ์ˆœ์ˆ˜ pip (https://github.com/JiaweiZhuang/xESMF/commit/53816d397b3c8f27b195132b27dbb41847e34e0f)๋กœ ์ „ํ™˜ํ•˜์—ฌ ๋นŒ๋“œ ์†๋„๊ฐ€ ๋งŽ์ด ๋นจ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ ์Šค์œ„์น˜ ์ดํ›„๋กœ Sphinx-autodoc์€ API ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด API ํŽ˜์ด์ง€ ๊ฐ€ ๊ฑฐ์˜ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Screen Shot 2019-03-20 at 2 51 31 PM

๋‚ด ํŒจํ‚ค์ง€ ์ž์ฒด์— pip ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์—†๋Š” ์˜์กด์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€ C/Fortran ํ™•์žฅ์€ conda ๋กœ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ autodoc์€ ๋‚ด ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

WARNING: autodoc: failed to import module 'xesmf.frontend'; the following exception was raised:
No module named 'xesmf'
WARNING: autodoc: failed to import module 'xesmf.backend'; the following exception was raised:
No module named 'xesmf'
...

๋‚ด๊ฐ€ ์‹œ๋„ํ•œ ๋ฐฉ๋ฒ•

๋‘ ๊ฐ€์ง€ ํ•ดํ‚น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ์—์„œ pip

  • pip install --no-deps xesmf ๋‚ด ํŒจํ‚ค์ง€๋ฅผ ๊ฐ•์ œ๋กœ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • autodoc_mock_imports = ['numpy', 'xarray', 'scipy', 'ESMF'] ์— conf.py autodoc_mock_imports = ['numpy', 'xarray', 'scipy', 'ESMF'] ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ข…์†์„ฑ์„ ๋ชจ์˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค . ๊ทธ ์ค‘ ESMF ๋Š” ๋†’์Šต๋‹ˆ๋‹ค .

autodoc_mock_imports xesmf ๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ sphinx-autodoc์— ๋Œ€ํ•œ ๋…์ŠคํŠธ๋ง์„ ์ œ๊ณตํ•˜๋ ค๋ฉด ๋ฌธ์„œ ๊ตฌ์„ฑ ํŒŒ์ผ ์ฝ๊ธฐ๋ฅผ ์ฝ์—ˆ์ง€๋งŒ --no-deps ์˜ต์…˜์„ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž ์ •์˜ pip ๋ช…๋ น์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋‹น์žฅ์€ API ๋ฌธ์„œ๋ฅผ ์˜จ๋ผ์ธ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ๋งค์šฐ ๋ถˆ๋งŒ์กฑ์Šค๋Ÿฌ์šด ๋‘ ๊ฐ€์ง€ ์†”๋ฃจ์…˜๋งŒ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ „์ฒด ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๋ ค๋ฉด conda ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค. ๋ฌธ์„œ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ C/Fortran ํ™•์žฅ์ด ์•„๋‹Œ ๋‚ด ํŒจํ‚ค์ง€์˜ ๋…์ŠคํŠธ๋ง๋งŒ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ์—„์ฒญ๋‚œ ๊ณผ์ž‰์ž…๋‹ˆ๋‹ค.
  • ๋˜๋Š” ํŒจํ‚ค์ง€์˜ setup.py ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋ณ€๊ฒฝํ•˜์—ฌ --no-deps ์˜ต์…˜ ์—†์ด pip-install์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚ด ํŒจํ‚ค์ง€ ์ž์ฒด์— ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๋” ๋‚˜์€ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ œ์•ˆ์ด๋ผ๋„ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

์ถ”๊ฐ€ ์ •๋ณด

๋‚ด ๋…ธํŠธ๋ถ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ „์ฒด ๋‹จ๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

conda create -n doc python=3.6
conda activate doc
conda install -c conda-forge pandoc
pip install numpydoc ipython nbsphinx sphinx_rtd_theme
pip install --no-deps xesmf
git clone https://github.com/JiaweiZhuang/xesmf
cd xesmf/doc
make html

์˜ฌ๋ฐ”๋ฅธ API ํŽ˜์ด์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
Screen Shot 2019-03-20 at 3 23 15 PM

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@stsewd ์ œ์•ˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! setup.py ๊ฐ™์ด ์กฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

on_rtd = os.environ.get('READTHEDOCS') == 'True'
if on_rtd:
    INSTALL_REQUIRES = []
else:
    INSTALL_REQUIRES = ['esmpy', 'xarray', 'numpy', 'scipy']

(https://github.com/JiaweiZhuang/xESMF/commit/5ce3364bfbd3081aad848c5cf4ac54a287ca236e)

์•ฝ๊ฐ„ ํ•ดํ‚คํ•˜์ง€๋งŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. pip์— ๋Œ€ํ•œ ์˜ต์…˜์„ ๋” ์ถ”๊ฐ€ํ•  ์ƒ๊ฐ์€ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด ๋งˆ์Œ์— ์˜ค๋Š” ํ•œ ๊ฐ€์ง€ ์†”๋ฃจ์…˜์€ READTHEDOCS ํ™˜๊ฒฝ ๋ณ€์ˆ˜ https://docs.readthedocs.io/en/stable/faq.html#how -do-i-change-behavior-for-๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. setup.py ํŒŒ์ผ์—์„œ ๋ฌธ์„œ ์ฝ๊ธฐ.

๊ทธ๋ฆฌ๊ณ  ์ผ๋ถ€ ์ข…์†์„ฑ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฌธ์„œ์— ๋Œ€ํ•ด์„œ๋งŒ ์‚ฌ์šฉ์ž ์ง€์ • ์š”๊ตฌ ์‚ฌํ•ญ ํŒŒ์ผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@stsewd ์ œ์•ˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! setup.py ๊ฐ™์ด ์กฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

on_rtd = os.environ.get('READTHEDOCS') == 'True'
if on_rtd:
    INSTALL_REQUIRES = []
else:
    INSTALL_REQUIRES = ['esmpy', 'xarray', 'numpy', 'scipy']

(https://github.com/JiaweiZhuang/xESMF/commit/5ce3364bfbd3081aad848c5cf4ac54a287ca236e)

์•ฝ๊ฐ„ ํ•ดํ‚คํ•˜์ง€๋งŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

PowerKiKi picture PowerKiKi  ยท  4์ฝ”๋ฉ˜ํŠธ

goerz picture goerz  ยท  4์ฝ”๋ฉ˜ํŠธ

cagataycali picture cagataycali  ยท  4์ฝ”๋ฉ˜ํŠธ

enielse picture enielse  ยท  4์ฝ”๋ฉ˜ํŠธ

davidfischer picture davidfischer  ยท  4์ฝ”๋ฉ˜ํŠธ