Pythonturtle: ์ž๋™์œผ๋กœ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ ํŒจํ‚ค์ง€ ๋นŒ๋“œ

์— ๋งŒ๋“  2018๋…„ 09์›” 23์ผ  ยท  31์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: PythonTurtle/PythonTurtle

https://github.com/cool-RR/PythonTurtle/pull/105#issuecomment -421965482, #106 ๋ฐ #90 ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ›„์† ์กฐ์น˜๋กœ ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์œ„ํ•œ ํŒจํ‚ค์ง•(๊ฐ€์žฅ ์ข‹์€) ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •๋ณด ์ˆ˜์ง‘์„ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํ”Œ๋žซํผ PythonTurtle์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง•์„ ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•ˆ๋‹ค๋ฉด ๋ชจ๋“  ๊ฒƒ์„ ์ž๋™ํ™”ํ•˜๋Š” ๊ฒƒ์€ ์‰ฌ์šด ์ผ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฆ‰, ์šฐ๋ฆฌ๋Š” ํ•„์š”

  1. ๋Œ€์ƒ ํŒจํ‚ค์ง€ ์œ ํ˜• ๋ชฉ๋ก(์˜ˆ: Windows์šฉ MSI, macOS AppImage, Debian DEB, RPM, Snap) ๋ฐ
  2. ์†Œ์Šค ์ œ์–ด์—๋งŒ ์žˆ๋Š” ์†Œ์Šค ์ฝ”๋“œ์—์„œ ๊ฐ ํŒจํ‚ค์ง€ ์œ ํ˜•์ด ๋นŒ๋“œ๋˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ด๊ณ  ์ž์„ธํ•œ ๋‹จ๊ณ„ ( ์ฝ๊ธฐ: ์…ธ ๋ช…๋ น)์˜ ์ „์ฒด ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค .

์ฐธ๊ณ : ์ด ๋ฌธ์ œ๋ฅผ ์ด ํ˜ธ์— ์“ฐ๋Š” ๊ฒƒ์ด ๋ถˆํŽธํ•˜๋ฉด ํ”„๋กœ์ ํŠธ Wiki ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ

automation

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

Windows์šฉ EXE์™€ macOS์šฉ ๋ฒˆ๋“ค์ด ์ž‘๋™ํ•œ ํ›„ ๋‹ค์Œ์œผ๋กœ ์ข‹์€ ์ ์€ Linux์šฉ AppImage ๋ฅผ

AppImage๋Š” (๋‹ค์†Œ)๋กœ ๋”๋น™ ๋œ ์•ฑ ์Šคํ† ์–ด,์ด AppImageHub . ๊ทธ๋ฆฌ๊ณ  ๋น„๊ต ํ•˜๋ฉด ์ •๋ง ๋ฉ‹์ง„ ์ผ์ด๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. :+1:

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

ํ˜„์žฌ Windows ๋ฐ macOS์šฉ py2exe ๋ฐ py2app ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค .

PyCon Otto ์˜ PyInstaller๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

py2exe ๋ฐ py2app ๋Œ€์‹  PyInstaller๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋™ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ PythonTurtle Python ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๋ฆด๋ฆฌ์Šคํ•  ๋•Œ PyPI๋กœ ํ‘ธ์‹œํ•˜๋Š” ๊ฒƒ์„ ์žŠ์–ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ Git ํƒœ๊ทธ(๋ฒ„์ „ ๋ฒˆํ˜ธ ํฌํ•จ)๋ฅผ GitHub ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ํ‘ธ์‹œํ•˜์—ฌ ๋ฆด๋ฆฌ์Šค๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์€ ๋ฆด๋ฆฌ์Šค ํŽ˜์ด์ง€ ๋ฅผ ํ†ตํ•ด ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์ด ์›ํ™œํ•˜๊ฒŒ ๊ฐ€๋Šฅํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ์ข…๋ฅ˜์˜ ์ž๋™ํ™”๊ฐ€ ๋‹ค์†Œ ๋†’์€ ๋ชฉํ‘œ๋ผ๋Š” ์ ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฆด๋ฆฌ์Šค๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์ ์— ๋„๋‹ฌํ•˜๋”๋ผ๋„ ํ™ฉํ™€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๋ฆด๋ฆฌ์Šค๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์ ์— ๋„๋‹ฌํ•œ๋‹ค๋ฉด ๋‚˜๋Š” ํ™ฉํ™€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์šฐ์ฃผ๋ณต์„ ์ค€๋น„ํ•˜์‹ญ์‹œ์˜ค! :์›ƒ๋‹ค:

์˜์‹ฌ๋˜๋Š” ๋Œ€๋กœ PyInstaller๋Š” ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋นŒ๋“œํ•ด์•ผ ํ•˜๋Š” ์ธํ”„๋ผ ์—์„œ

๋‚˜๋Š” Windows์™€ Mac์ด ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ AppVeyor์—์„œ ๋นŒ๋“œ๊ฐ€ ์ˆ˜ํ–‰๋˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Python 3์ด ์„ค์น˜๋œ macOS๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค( ๋ฌธ์„œ๊ฐ€ ๊ตฌ์‹์ผ ๋ฟ์ด๋ฉฐ Python 3์œผ๋กœ ๋นŒ๋“œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค).

Python ํŒจํ‚ค์ง€ ๋นŒ๋“œ๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์ž๋™์œผ๋กœ PyPI์— ์—…๋กœ๋“œ). IIUC, ์–ด์จŒ๋“  (์ผ๋ถ€ ๊ธฐ๋Šฅ) PyInstaller๋กœ ๋นŒ๋“œํ•˜๋ ค๋ฉด setup.py ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฏธ ์ด ๋ฐฉ๋ฒ•์œผ๋กœ PythonTurtle์„ ์„ค์น˜ํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋ฅผ PyPI ํ”„๋กœ์ ํŠธ์— ๊ด€๋ฆฌ์ž๋กœ ์ถ”๊ฐ€ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋‚ด ์ž์‹ ์˜ ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ์ž‘์—…์„ ๋” ์‰ฝ๊ฒŒ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์‚ฌ์šฉ์ž ์ด๋ฆ„์€ ๋‹น์—ฐํžˆ "bittner"์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์„ PyPI์˜ ๊ด€๋ฆฌ์ž๋กœ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

PyInstaller์™€ ๊ด€๋ จํ•˜์—ฌ ReactOS๊ฐ€ ์žˆ๋Š” VM์ด โ€‹โ€‹Windows ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

pip install PythonTurtle ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•˜๊ณ  ํ•„์š”ํ•œ ๋ชจ๋“  ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜์‹ญ์‹œ์˜ค.

๊ฒฐ๋ก :

  • install_requires=['wxPython'] ๋ฅผ setup() ์— ์ถ”๊ฐ€ํ•  ์ˆ˜_ ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ ์ „์ œ ์กฐ๊ฑด( README ์— ์–ธ๊ธ‰๋จ )์ด ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ๊ธฐ์ˆ ์ ์ธ ์˜ค๋ฅ˜๋ฅผ ์žก์•„๋‚ด๊ณ  ์„ค์น˜์— ์‹คํŒจํ•  ๊ฒฝ์šฐ ์œ ์šฉํ•œ ํžŒํŠธ๋ฅผ ์ธ์‡„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋Œ€์•ˆ์œผ๋กœ, ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ README์—์„œ ์„ค์น˜ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  wx ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์„ ๋•Œ PythonTurtle์ด ์นœ์ˆ™ํ•œ _reminder_๋ฅผ ์ธ์‡„ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค( ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋ชจ๋“ˆ์˜ ModuleNotFoundError ).

platform.release() ๋ฐ/๋˜๋Š” os.name ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ "์ „์ œ ์กฐ๊ฑด ์ž๋™ ๊ฐ์ง€" ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ƒ๋‹นํžˆ ๋ฒˆ๊ฑฐ๋กญ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ๋ฌธ์ž ๋ฉ”์‹œ์ง€๋ฅผ ์ธ์‡„ํ•˜๊ณ  URL์ด ์žˆ๋Š” README์˜ ์„ค์น˜ ์„น์…˜์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ReactOS๊ฐ€ ์žˆ๋Š” VM์ด โ€‹โ€‹Windows ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์ž๋™ํ™”๋œ ๋ฐฉ์‹์œผ๋กœ PythonTurtle ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ํด๋ผ์šฐ๋“œ์˜ ์„œ๋น„์Šค์—์„œ VM์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ž์„ธํžˆ ์•Œ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ๋‚˜์š”? (๊ฐœ๋ฐœ์ž ๋จธ์‹ ์—์„œ๋งŒ ๋กœ์ปฌ์—์„œ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?)

๋‹น์‹  ๋ง์ด ๋งž์•„, ๋‚˜๋Š” ์ด๊ฒƒ์„ ์ƒ๊ฐํ•˜์ง€ ์•Š์•˜๋‹ค.

2๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์š”.

  1. ReactOS๊ฐ€ PyInstaller๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Windows ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

  2. ํด๋ผ์šฐ๋“œ์—์„œ ์ž๋™์œผ๋กœ ์ž‘๋™ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ฒซ ๋ฒˆ์งธ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋Œ€๋‹ต์ด ์˜ˆ์ด๊ณ  ํ•ด๋‹น ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” SaaS ๊ณต๊ธ‰์ž๊ฐ€ ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ReactOS ๊ฒŒ์ŠคํŠธ๋กœ VirtualBox๋ฅผ ์‹คํ–‰ํ•˜๋Š” Docker ์ด๋ฏธ์ง€๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น Docker ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•  SaaS ์ œ๊ณต์—…์ฒด๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์„๊นŒ์š”?

https://github.com/pypa/python-packaging-user-guide/issues/267 ์—๋Š” Python ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒจํ‚ค์ง•์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ํฅ๋ฏธ๋กœ์šด ๋งํฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Linux ๋ฒˆ๋“ค์„ GitHub์— ์—…๋กœ๋“œํ•˜๋Š” ์ฆ‰์‹œ(PR #123์„ ํ†ตํ•ด) macOS์šฉ CI ํŠธ๋ ˆ์ธ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค . :์–Œ:

Windows์šฉ EXE์™€ macOS์šฉ ๋ฒˆ๋“ค์ด ์ž‘๋™ํ•œ ํ›„ ๋‹ค์Œ์œผ๋กœ ์ข‹์€ ์ ์€ Linux์šฉ AppImage ๋ฅผ

AppImage๋Š” (๋‹ค์†Œ)๋กœ ๋”๋น™ ๋œ ์•ฑ ์Šคํ† ์–ด,์ด AppImageHub . ๊ทธ๋ฆฌ๊ณ  ๋น„๊ต ํ•˜๋ฉด ์ •๋ง ๋ฉ‹์ง„ ์ผ์ด๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. :+1:

๋‚˜์—๊ฒŒ ์ข‹์€ ์†Œ๋ฆฌ!

ํ˜„์žฌ๋กœ์„œ๋Š” macOS์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒˆ๋“ค ๋นŒ๋“œ(PyInstaller ์‚ฌ์šฉ)๊ฐ€ ์™„์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์•ˆ์œผ๋กœ Homebrew ๊ณต์‹์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ด€๋ จ ๋ฌธ์„œ๋ฅผ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ , ๊ณต์‹์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋ ค๋ฉด Mac์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์ด ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ด๋ ต์ง€ ์•Š์•„ ๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š”. :์ƒ๊ฐ:

๋‹ค์Œ์€ Python(3)๊ณผ ๊ด€๋ จ๋œ ๊ณต์‹์ž…๋‹ˆ๋‹ค.

  • Python (3.7์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Python@3 ์€ ์†Œ์œ„ "๋ณ„์นญ"์ด๋ผ๊ณ  ํ•˜๋Š” ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์ž„)
  • wxPython ( Python@2 ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„, https://github.com/Homebrew/homebrew-core/issues/32744 ์ฐธ์กฐ)

Python@3 (=3.7)์— ์˜์กดํ•˜๊ณ  pip๋ฅผ ํ†ตํ•ด wxPython์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค( ์šฐ๋ฆฌ ํ…Œ์ŠคํŠธ์—์„œ์™€ ๊ฐ™์ด ).

์ฐธ๊ณ ๋กœ ์ž๋™ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ( api_key: ๊ฐ€ ์ƒ˜ํ”Œ ๊ฐ’์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ) VSCodium ํ”„๋กœ์ ํŠธ ๊ฐ€ GitHub์—์„œ ์ž๋™ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ

Ram, ๋‹น์‹ ์€ ํ˜„์žฌ์˜ ์ตœ์šฐ์„  ์ˆœ์œ„๋กœ "Windows ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ"์„ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋…ธ๋™์กฐํ•ฉ์˜ ํ˜„ํ™ฉ์„ ์ ์–ด๋ณด์ž.

Windows Installer(์ง„ํ–‰ ์ƒํ™ฉ ๊ฐœ์š”)

  • Windows ๋นŒ๋“œ๋Š” 2018๋…„ 10์›”๋ถ€ํ„ฐ AppVeyor์—์„œ ์ž‘๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๋Ÿฌํ•œ ๋นŒ๋“œ๋Š” Windows .EXE ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ .MSI ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค( ์˜ˆ์ œ ์ž‘์—… ์ฐธ์กฐ).
  • .MSI ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์˜ ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์ž‘์•„์„œ ์‹ค์ œ๋กœ ๋น„์–ด ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.
  • ๋‚˜๋Š” ๋‹น์‹ ์ด .EXE๋ฅผ (๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‹คํ–‰ํ•˜์—ฌ) .MSI๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ๋˜ ๊ฒƒ์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. (์•„๋‹ˆ๋ฉด ์ด ์‚ฌ๋žŒ์ด ๋‚˜๋ฅผ ์œ„ํ•ด ํ…Œ์ŠคํŠธํ•œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด์—ˆ์Šต๋‹ˆ๊นŒ? ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)
  • ๋‚˜๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ์—์„œ(๋˜๋Š” ์šฐ๋ฆฌ์™€์˜ ์‚ฌ์ ์ธ ๋Œ€ํ™”์˜€์Šต๋‹ˆ๊นŒ?) ์ž‘๋™ํ•˜๋Š” MSI ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค(์‹ค์ œ๋กœ๋Š” ๋‹จ์ง€ MS Visual Studio ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ์ •๋„์ž…๋‹ˆ๋‹ค).

๋ชจ๋“  ๊ฒƒ์„ ์ค€๋น„ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ €๋Š” Windows ์ปดํ“จํ„ฐ๋„ ์—†๊ณ  ๊ตฌ์ž…ํ•  ๊ณ„ํš๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์—(MacOS๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค), ๋ˆ„๋ฝ๋œ ์œ ์ผํ•œ ์‚ฌ๋žŒ์€ ๋ˆ„๋ฝ๋œ ํผ์ฆ ์กฐ๊ฐ์„ ์ธ๊ณ„๋ฐ›์•„ ์ œ์ž๋ฆฌ์— ๋‘๋Š” ์‚ฌ๋žŒ๋ฟ์ž…๋‹ˆ๋‹ค. ๋‚ด ์ง๊ฐ์—์„œ ์šฐ๋ฆฌ๋Š” ์ •๋ง, ์ •๋ง "์ž‘์—… ์™„๋ฃŒ"์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„(์ž์›๋ด‰์‚ฌ์ž ํ•„์š”)

StackOverflow ์— Microsoft Visual Studio Installer Projects ํ™•์žฅ์œผ๋กœ ํ•„์š”ํ•œ ๊ตฌ์„ฑ์„ ์ƒ์„ฑํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค .

๋”ฐ๋ผ์„œ ์ธ์ˆ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? IIUC์—์„œ ํ•ด์•ผ ํ•  ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ ์„ค์ •์œผ๋กœ Visual Studio ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ
  2. ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์ด ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ๋นŒ๋“œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
  3. ์ด ํ”„๋กœ์ ํŠธ์— .vdproj ํŒŒ์ผ ์ถ”๊ฐ€

๊ทธ๋Ÿฐ ๋‹ค์Œ AppVeyor๋Š” ํ•ด๋‹น ํŒŒ์ผ์„ ๊ฐ์ง€ํ•˜๊ณ  ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋นŒ๋“œํ•˜๊ณ  ๋นŒ๋“œ ์•„ํ‹ฐํŒฉํŠธ ํŽ˜์ด์ง€์—์„œ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋ฌธํ—Œ

๋‚ด ์ง๊ฐ์—์„œ ์šฐ๋ฆฌ๋Š” ์ •๋ง, ์ •๋ง "์ž‘์—… ์™„๋ฃŒ"์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋ฉด ๊ฑฐ์˜ ์™„๋ฃŒ๋  ๊ฒƒ ๊ฐ™์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Visual Studio Project๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‚˜ ํ˜„์žฌ ๊ณ„ํš์ด ๋ฌด์—‡์ธ์ง€์กฐ์ฐจ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์ด ์ผ์„ ๋งก๋Š”๋‹ค๋ฉด ํ’€ํƒ€์ž„์œผ๋กœ ๋ฉฐ์น ์€ ๊ฑธ๋ฆด ๊ฒƒ ๊ฐ™์•„์š”.

๋‹น์‹ ์€ ์ด๊ฒƒ์— ๋งŽ์€ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋‹น์‹ ์—๊ฒŒ ์ด๊ฒƒ์„ ๋งํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ธฐ๋ถ„์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ํ™•์‹คํžˆ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ผํ•˜๊ธฐ ์œ„ํ•ด ์ž์›ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. PythonTurtle์€ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ํ•œ ์‹œ๊ฐ„ ์ด์ƒ์„ ํˆฌ์žํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ ๋‹น์žฅ ๋‚ด ์ธ์ƒ์˜ ์šฐ์„  ์ˆœ์œ„์— ๊ฐ€๊น์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ฌธ์ œ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์ง€์ ํ•˜๊ณ  ์ด ๋ฌธ์ œ ์—†์ด๋Š” ์•„๋ฌด ๊ฐ€์น˜๋„ ์—†๋‹ค๊ณ  ๋งํ•˜๋Š” ์„ฑ๊ฐ€์‹  ๊ฑด๊ฐ€์š”? ๋‚˜๋Š” ๋‹น์‹ ์ด ๋‹ค๋ฅธ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋…ธ๋ ฅ์ด ๋‚˜์—๊ฒŒ ๋‚ญ๋น„๋˜๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ์ฐธ์—ฌํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋‹น์‹ ์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์ด ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋‚˜ ์ž‘์€ ์ผ์„ ์œ„ํ•ด ์ œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด, ๊ธฐ๊บผ์ด ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์ƒ๊ฐ์„ ๊ฐ–๋Š” ๊ฒƒ. "์ €๋Š” Windows ์ปดํ“จํ„ฐ๊ฐ€ ์—†๊ณ  ๊ตฌ์ž…ํ•  ๊ณ„ํš๋„ ์—†์Šต๋‹ˆ๋‹ค"๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ชฉ๋ก์— ์žˆ๋Š” ํ•ญ๋ชฉ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋ฐ˜๋Œ€๊ฐ€ ์ด ํ‹ฐ์ผ“์— ๋Œ€ํ•ด ์ถฉ๋ถ„ํžˆ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๊ฑฐ๋‚˜ Windows ๊ด€๋ จ ์ž‘์—…์„ ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๊ณ  ์‹ถ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๋ฉด ์˜ˆ, ์ •๋‹นํ•œ ๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ Windows ๋ผ์ด์„ผ์Šค์— ๋ˆ์„ ์“ฐ๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ์•„์ด๋””์–ด๋Š” ReactOS๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  Visual Studio ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ReactOS๊ฐ€ ์˜ต์…˜์ด ์•„๋‹Œ ๊ฒฝ์šฐ Windows ๋ผ์ด์„ ์Šค/๋จธ์‹ ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„์›€์ด ๋˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”.

๋„์›€์ด ๋˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”.

Windows ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด _์—ด๊ด‘์ ์ธ_ ์‚ฌ๋žŒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? Windows๋Š” Python์—๊ฒŒ ์ง€์ €๋ถ„ํ•œ ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” "Python + Windows"๊ฐ€ ์ž˜ ์–ด์šธ๋ฆฌ๋Š” ์ž˜๋ชป๋œ ์ด๋ฏธ์ง€์— ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค.

MSI ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ(WiX, WiX.Py )์„ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€์ฒด ์†”๋ฃจ์…˜์€ https://github.com/PythonTurtle/PythonTurtle/issues/108#issuecomment -683420022๋ฅผ ์ฐธ์กฐ

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ์‹ถ์–ด?

๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ€๋Šฅํ•œ ์ž์› ๋ด‰์‚ฌ์ž๊ฐ€ ๋„์ฐฉํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž‘์—… ๋ชฉ๋ก...

  • [ ] __Linux__: pyinstaller ๋นŒ๋“œ ์„ฑ๊ณต

    • [ ] GitHub ์ž‘์—…์—์„œ ์ž๋™ํ™”

  • [ ] __macOS__: pyinstaller ๋นŒ๋“œ ์„ฑ๊ณต

    • [ ] GitHub ์ž‘์—…์—์„œ ์ž๋™ํ™”

  • [ ] __Windows__: pyinstaller ๋นŒ๋“œ ์„ฑ๊ณต

    • [ ] GitHub ์ž‘์—…์—์„œ ์ž๋™ํ™”

์ง„ํ–‰์— ๋„์›€์ด ๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ํžŒํŠธ:

  • [x] python3 setup.py clean bundle ํ•˜๋ฉด ๋ชจ๋“  ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฒˆ๋“ค์„ ๋นŒ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(PyInstaller ์‚ฌ์šฉ).
  • [x] ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ(Windows์šฉ .exe ํฌํ•จ)์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ๋นŒ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค .
  • [ ] Windows ์‚ฌ์šฉ์ž ๋Š” Windows ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ ์„ ๊ธฐ๋Œ€ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค . ์ด๊ฒƒ์€ MSI ๋˜๋Š” WiX.Py ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋‘˜ ๋‹ค ์•„์ง ์ค€๋น„๋˜์ง€ ์•Š์Œ).
  • [ ] GitHub Actions๋Š” Git ํƒœ๊ทธ๋ฅผ master ํ‘ธ์‹œํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฅผ GitHub ๋ฆด๋ฆฌ์Šค ๋กœ ์ž๋™ ํ‘ธ์‹œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋œ ํž˜๋“ค๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด action/create-release ์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ฒŒ์‹œํ•œ Microsoft ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์š”์ฒญ์— ๋Œ€ํ•œ @judej์˜ ๋ฉ‹์ง„ ๋‹ต๋ณ€์„

๊ฒฐ๋ก : MSI ์ž์›๋ด‰์‚ฌ์ž๋Š” ์—†์ง€๋งŒ ๋‘ ๊ฐ€์ง€ ๋” ํฅ๋ฏธ๋กœ์šด ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋นŒ๋“œํ•˜๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” Python ZIP ์•ฑ ์„ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. pynsist โ€“
  2. shiv โ€“ _PEP 441์— ์„ค๋ช…๋œ ๋Œ€๋กœ ์™„์ „ํžˆ ๋…๋ฆฝ์ ์ธ Python zipapp์„ ๋นŒ๋“œํ•˜์ง€๋งŒ ๋ชจ๋“  ์ข…์†์„ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค!_

๊ทธ๊ฒƒ์€ ํ‰๊ฐ€ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๋‘ ๊ฐ€์ง€ ์ข‹์€ ๋Œ€์•ˆ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ ๋งˆ์›Œ ์ฃผ๋“œ! :100: :medal_military:

๋ฉ‹์žˆ๋Š”. ๋‚˜๋Š” ๋˜ํ•œ ์ตœ๊ทผ์— PyOxidizer ์— ๋Œ€ํ•ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๋‚ด๊ฐ€ ํ”„๋กœ์ ํŠธ( ํ† ๋ก  )๋ฅผ ์ดํ•ดํ–ˆ๋Š”์ง€ 100% ํ™•์‹ ํ•˜์ง€ ๋ชปํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์„ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ๋ง์— shiv ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. PyOxidizer ์„(๋ฅผ) ์‹œ๋„ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฅผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋ฉฐ์น  ์ „์— ์ƒˆ๋กœ์šด ์ผ์„ ์‹œ์ž‘ํ•ด์„œ ์•„๋ฌด๊ฒƒ๋„ ํ•  ์‹œ๊ฐ„์ด ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค :(

PyOxidizer ๋Š” ๋‚˜์—๊ฒŒ ์‹คํ—˜์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. Rust๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“  OS ๊ธฐ๋ณธ ๊ณ„์ธต์ธ "A Rust VM"์—์„œ ์‹คํ–‰๋˜๋Š” Python ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์–ด๋–ค ์ด์ ์„ ์ œ๊ณตํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์‹คํ–‰ํ•˜๋Š” PyInstaller ์„ค์ •์ด ์ž˜ ๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? :3rd_place_medal:

shiv ๋Š” ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ์ ‘๊ทผ ๋ฐฉ์‹(๋ฆด๋ฆฌ์Šค ์•„ํ‹ฐํŒฉํŠธ์˜ "ํฌํŠธํด๋ฆฌ์˜ค"์— ์ƒˆ๋กœ ์ถ”๊ฐ€๋จ)์œผ๋กœ, ์ฒญ์ค‘์—๊ฒŒ ์ œ๊ณตํ•˜๊ธฐ์— ํฅ๋ฏธ๋กœ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋น„๋ก ์†Œ์ˆ˜์˜ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ์˜ˆ์ƒํ•˜์ง€๋งŒ) ๋‚˜๋Š” ๊ทธ ์•„์ด๋””์–ด๊ฐ€ ์Šค๋ฆด์„ ๋Š๋‚๋‹ˆ๋‹ค. :2nd_place_medal:

pynsist ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๊ณ  ์žˆ๋Š” Microsoft Windows ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Windows ์‚ฌ๋žŒ๋“ค์ด ๊ธฐ๋Œ€ํ•˜๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. :one: ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ ๋‹ค์šด๋กœ๋“œ, :two: ์„ค์น˜ ๋ฐ ์‹œ์ž‘ ๋ฉ”๋‰ด ํ•ญ๋ชฉ ์ถ”๊ฐ€๋ฅผ ์œ„ํ•ด ์‹คํ–‰ :1์œ„_์žฅ์†Œ_๋ฉ”๋‹ฌ:

pynsist์˜ ๋‹จ์ ์€ Windows ์ „์šฉ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” Mac๊ณผ Linux์—์„œ Shiv(LinkedIn์—์„œ)๋ฅผ ๋ฐœ์ „์‹œํ‚ค๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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