Python ์–ธ์–ด์šฉ ์ปดํŒŒ์ผ๋Ÿฌ์ธ Nuitka 2.0 ์ถœ์‹œ

Python ์Šคํฌ๋ฆฝํŠธ๋ฅผ C ํ‘œํ˜„์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” Nuitka 2.0 ํ”„๋กœ์ ํŠธ์˜ ๋ฆด๋ฆฌ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ CPython๊ณผ์˜ ์ตœ๋Œ€ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด libpython์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ฐ์ฒด ์กฐ์ž‘์„ ์œ„ํ•œ ๊ธฐ๋ณธ CPython ๋„๊ตฌ ์‚ฌ์šฉ). Python 2.6, 2.7, 3.3 - 3.11์˜ ํ˜„์žฌ ๋ฆด๋ฆฌ์Šค์™€ ์™„์ „ํ•œ ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. CPython์— ๋น„ํ•ด ์ปดํŒŒ์ผ๋œ ์Šคํฌ๋ฆฝํŠธ๋Š” pystone ํ…Œ์ŠคํŠธ์—์„œ 335%์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋Š” Apache ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

์ƒˆ ๋ฒ„์ „์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ:

  • ํŒจํ‚ค์ง€ ๊ตฌ์„ฑ์— ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์–ด ์ปดํŒŒ์ผ ํƒ€์ž„์— ์„ค์น˜๋œ ํŒจํ‚ค์ง€์—์„œ ๊ฐ’์„ ์ฟผ๋ฆฌํ•˜๊ณ  ํ•ด๋‹น ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฑ์—”๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์ง€์›ํ•˜๋ฉด ์ด์ „์— ํ”Œ๋Ÿฌ๊ทธ์ธ ์—ฐ๊ฒฐ์ด ํ•„์š”ํ–ˆ๋˜ ํ‘œ์ค€ ๋ฐฉ์‹์œผ๋กœ ๋งŽ์€ ์ž‘์—…์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ ํŒจํ‚ค์ง€์˜ ๊ตฌ์„ฑ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด get_parameter ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ชจ๋“ˆ์˜ ๋™์ž‘์„ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Numba JIT ๋˜๋Š” Torch JIT๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋„๋ก ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ตฌ์„ฑ์— ์ •์˜๋˜์–ด ์žˆ์ง€๋งŒ onefile ๋ชจ๋“œ์—์„œ ๋นŒ๋“œํ•  ๋•Œ ์‹คํ–‰ ํŒŒ์ผ๊ณผ ๋ณ„๋„๋กœ ์ œ๊ณต๋˜์–ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ผ ํ…œํ”Œ๋ฆฟ์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด "--include-onefile-external-data" ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • GCC์—์„œ ์ •์ƒ์ ์ธ ์‹คํ–‰ ์ˆœ์„œ(์ œ์–ด ํ๋ฆ„) ์œ„๋ฐ˜์„ ์ฐจ๋‹จํ•˜๋Š” CFI(์ œ์–ด ํ๋ฆ„ ๋ฌด๊ฒฐ์„ฑ) ๋ณดํ˜ธ ๋ชจ๋“œ๋ฅผ ์„ค์ •ํ•˜๋Š” "--cf-protection" ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”Œ๋Ÿฌ๊ทธ์ธ yaml ํŒŒ์ผ์˜ ๊ฒฝ์šฐ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ ์ฒดํฌ์„ฌ์„ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ ํ–ฅํ›„ ๋Ÿฐํƒ€์ž„ ํ™•์ธ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.
  • ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ์˜ต์…˜์„ ์ค„๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ƒˆ ์ค„์ด ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋กœ ์‚ฌ์šฉ๋จ). ์˜ˆ: include-data-dir: | a=bc=d
  • ๋ฃจํ”„ ์œ ํ˜•์— ๋Œ€ํ•œ ๋ถ„์„์ด ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ, ์ด๋Š” ํ–ฅํ›„ ์„ ํƒ์  ์ตœ์ ํ™”๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๋น„๊ณต์œ  ๋ฐ ์ด์Šค์ผ€์ดํ”„ ๋ณ€์ˆ˜ ์ž‘์—… ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ตœ์ ํ™”๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์•ˆํ‹ฐ ๋ธ”๋กœํŠธ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๊ธฐ๋Šฅ์ด ํ™•์žฅ๋˜์–ด ์ด์ œ streamlit, torch, knetworkx, distribution, skimage, bitandbytes, tf_keras, pip, networkx ๋ฐ pywt ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ”์ธ๋”ฉ)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํŒจํ‚ท ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. pytest, IPython, nose, triton์€ ์ œ์™ธ๋˜๊ณ  dask).

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€