Mopidy: Mopidy๋ฅผ Python 3์œผ๋กœ ์ด์‹

์— ๋งŒ๋“  2014๋…„ 07์›” 13์ผ  ยท  32์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mopidy/mopidy

Python 3์€ Python์˜ ๋ฏธ๋ž˜์ด๋ฉฐ Mopidy๊ฐ€ ๋ฐฐํฌ๋œ ํ™˜๊ฒฝ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ Python 3.3 ์ด์ƒ์ด ํ•„์š”ํ•œ asyncio๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ ๋งค์šฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Mopidy ํ”„๋กœ์ ํŠธ ์™ธ๋ถ€์—๋Š” Python 3์œผ๋กœ ์ด๋™ํ•˜๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€ ๋˜๋Š” ์š”์†Œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Python 3์—์„œ Mopidy๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ถ”์ ํ•˜๋Š” ๋งˆ์Šคํ„ฐ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค.

  • ์ข…์†์„ฑ:

    • [x] Pykka๋Š” Python 2.6+, 3.2+๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

    • [x] Tornado๋Š” Python 2.6+, 3.2+๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

    • ์ง€์ŠคํŠธ๋ฆฌ๋จธ:

    • [x] #225: GStreamer Python ๋ฐ”์ธ๋”ฉ์„ gst-python(Python 2๋งŒ ํ•ด๋‹น)์—์„œ PyGI(Python 2+3)๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด PyGI์—์„œ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋ ค๋ฉด 0.10์—์„œ 1.x๋กœ ๋™์‹œ์— GStreamer์˜ ํฌํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

    • [x] #665: ๋ฏน์„œ๊ฐ€ GStreamer 1.x์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋ฏน์„œ๋ฅผ GStreamer์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    • [x] #671: GStreamer์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ์žฌ์ƒ ๋ชฉ๋ก ํ˜•์‹ ์ง€์›์„ ์ถ”์ถœ/์žฌ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. PyGI/GStreamer 1.x ์œ„์— ์ด๋ฅผ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ฝ”๋“œ ์Šคํƒ€์ผ์„ Python 2+3๊ณผ ํ˜ธํ™˜๋˜๋„๋ก ์ด๋™:

    • [x] flake8 ๊ฒฝ๊ณ  ํด๋ฆฐ ์ฝ”๋“œ.

    • [x] 2.7 ์ด์ „์˜ ๋ชจ๋“  Python ๋ฒ„์ „์— ๋Œ€ํ•œ ์ง€์›์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.

    • [x] from __future__ import unicode_literals ์–ด๋””์—๋‚˜ ์‚ฌ์šฉํ•˜๊ณ  ์ด์ง„ ๋ฌธ์ž์—ด์„ b'foo' .

    • [x] 2to3 ๋„๊ตฌ๋กœ ์‹๋ณ„๋œ ์ด์‹์„ฑ ๋ฌธ์ œ๋ฅผ ์„ ํƒ์ ์œผ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐœ๋ฐœ ์ง€์›:

    • [x] tox๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด Python 2.7๊ณผ ๋ณ‘๋ ฌ๋กœ Python 3 ํ…Œ์ŠคํŠธ๋ฅผ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ชจํ”ผ๋”” ์Šคํฌํ‹ฐํŒŒ์ด:

    • [x] Python 2.7, 3.2+๋ฅผ ์ง€์›ํ•˜๋Š” ์ƒˆ๋กœ์šด libspotify ๋ฐ”์ธ๋”ฉ pyspotify 2๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

    • [x] pyspotify 2 ์œ„์— Mopidy-Spotify๋ฅผ ๋‹ค์‹œ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ชจํ”ผ๋””-MPRIS:

    • [x] libindicate์— ๋Œ€ํ•œ python-indicate ๋ฐ”์ธ๋”ฉ์€ PyGI๋กœ ๋Œ€์ฒด๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • [x] python-dbus๋Š” PyGI๋ฅผ ํ†ตํ•ด GDBus๋กœ ๋Œ€์ฒด๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ™•์žฅ ์ƒํƒœ๊ณ„:

    • [x] cookiecutter-mopidy-ext์—์„œ tox๋ฅผ ํ…Œ์ŠคํŠธ ์‹คํ–‰๊ธฐ๋กœ ์‚ฌ์šฉํ•˜์—ฌ Python 3์—์„œ๋„ ํ…Œ์ŠคํŠธ ์‹คํ–‰์„ ์‹œ์ž‘ํ•  ์ค€๋น„๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

    • [ ] Mopidy ์ž์ฒด๊ฐ€ Python 2+3์—์„œ ์ž‘๋™ํ•  ๋•Œ ๋ชจ๋“  ํ™•์žฅ์—์„œ Python 2+3 ์ง€์›์— ๋Œ€ํ•œ pull ์š”์ฒญ ๋ณด๋‚ด๊ธฐ/๋ฌธ์ œ ๋งŒ๋“ค๊ธฐ.

  • [x] ~๋ชจ๋“  ํ™•์žฅ์ด Python 2+3์„ ์ง€์›ํ•˜๋ฉด Mopidy์—์„œ Python 2 ์ง€์›์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • [x] Python 2isms๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  • [x] asyncio์™€ ๊ฐ™์€ ์ƒˆ๋กœ์šด Python 3 ๊ธฐ๋Šฅ์„ ์ฆ๊ธฐ์‹ญ์‹œ์˜ค.
C-enhancement

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

๋‚˜๋Š” ์—ฌ์ „ํžˆ Mopidy๋ฅผ Python 3์œผ๋กœ ์ด์‹ํ•˜๋Š” ๋ฐ ์ „๋…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” Mopidy๊ฐ€ Python 2์™€ ํ•จ๊ป˜ ์ฃฝ๊ฒŒ ๋‘์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ญ์‚ฌ

์šฐ๋ฆฌ๋ฅผ Python 3์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์€ ๋ชจ๋“  ์ข…์†์„ฑ์ด Python 3์—์„œ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๋…„ ์ „์— ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • Pykka ๋Š” 2011๋…„ Mopidy์—์„œ ์ถ”์ถœ๋œ ์ดํ›„ Python 3๊ณผ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.
  • pyspotify 2.x๋Š” Python 3 ์ง€์› ๋ฐ ์™„์ „ํ•œ libspotify ๋ฐ”์ธ๋”ฉ์„ ์–ป๊ธฐ ์œ„ํ•ด ์™„์ „ํžˆ ์žฌ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ๋งŒ์œผ๋กœ๋„ ์‹œ์ž‘๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๊ฑฐ์˜ 2๋…„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. Spotify๊ฐ€ libspotify์˜ ๋งŽ์€ ๋ถ€๋ถ„์„ ๊นจ๋Š” ๋•๋ถ„์— ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„ ๋ฌดํšจํ™”๋œ ์ž‘์—…์ž…๋‹ˆ๋‹ค.
  • 3๋…„ ์ „ Mopidy 2.0์—์„œ ์ถœ์‹œ๋œ GStreamer 0.10/PyGObject์—์„œ GStreamer 1.x/PyGI๋กœ์˜ Mopidy ์ด์‹์€ ๋‘ ๋ฒˆ์งธ ์œก์•„ ํœด์ง์˜ ์ฃผ์š” ํ”„๋กœ์ ํŠธ์˜€์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์˜ ์˜ค๋žœ ์—ญ์‚ฌ์™€ ๋ฌธ์ œ ์ถ”์ ๊ธฐ์˜ ์ƒํƒœ ์‚ฌ์ด์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋“ฏ์ด, ์ด ํ”„๋กœ์ ํŠธ์™€ ์ผ๋ฐ˜์ ์œผ๋กœ ์˜คํ”ˆ ์†Œ์Šค๋Š” ๋Œ€๊ธฐ์—…์—์„œ ์Šคํƒ€ํŠธ์—…์œผ๋กœ ์ด์งํ•œ ์ดํ›„๋กœ ์ œ ์ตœ์šฐ์„  ์ˆœ์œ„๊ฐ€ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. 3 ๋…„ ์ „.

๊ทธ๋Ÿฌ๋‚˜ ์ฒœ์ฒœํžˆ ๋‹ค์‹œ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ํ•œ ๋ฒˆ์— ํ•œ ํ”„๋กœ์ ํŠธ์— ์ง‘์ค‘ํ•˜๊ณ  ๋‹ค์Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋ฐฐ์†กํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ Mopidy.js ์™€ Mopidy-MPRIS ๋Š” ์•ฝ๊ฐ„์˜ ๋ถ€๋“œ๋Ÿฌ์šด ์‚ฌ๋ž‘๊ณผ ๊ด€์‹ฌ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ €๋Š” Pykka ์˜ ์ƒˆ๋กœ์šด ๋ฆด๋ฆฌ์Šค๋ฅผ ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ž‘์€ ๊ฐœ์„  ์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜๋Š” ๋งŽ์€ Mopidy ์„ค์ •์˜ ์‹œ์ž‘ ์‹œ๊ฐ„์„ ํฐ ์š”์ธ์œผ๋กœ ์ค„์—ฌ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ

Pykka 2๊ฐ€ ์ถœ์‹œ๋˜๋ฉด ์ œ ์ฃผ์š” ๋ชฉํ‘œ๋Š” Mopidy๋ฅผ Python 3์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ ์ž‘์—…์ด ์–ธ์ œ ์™„๋ฃŒ๋  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์˜ˆ์ƒ ์‹œ๊ฐ„์„ ์ œ๊ณตํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์‹คํŒจ์— ๋Œ€๋น„ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ชจ๋‘ ์™ธ๋ถ€ ์š”์ธ๊ณผ ๋™๊ธฐ์— ํฌ๊ฒŒ ์˜์กดํ•ฉ๋‹ˆ๋‹ค.

๋„์›€์„ ์ฃผ๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ธฐ์—ฌ์ž๊ฐ€ ์ง์ ‘ ๋…ธ๋ ฅ์„ ํฌ๊ฒŒ ๋„์šธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ  ๊ทœ์น™์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์˜คํ”ˆ ์†Œ์Šค ์ž‘์—…์œผ๋กœ ๋Œ์•„๊ฐ€์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— PR ๊ฒ€ํ† ๋Š” ์–‘ ๋‹น์‚ฌ์ž์—๊ฒŒ ๊ธˆ์„ธ ์˜์š•์„ ์žƒ๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์—์„œ ์ด์ „์— ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ผ๋ฐ˜์ ์ธ ์œ ์ง€ ๊ด€๋ฆฌ ๋ถ€๋‹ด์„ ์ค„์ด๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๊ฒƒ์€ ํ•ญ์ƒ ๊ฐ„์ ‘์ ์œผ๋กœ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํ•ต์‹ฌ ๊ฐœ๋ฐœ์ž์˜ ๊ฒฝ์šฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ ๋ชจ๋‘์—๊ฒŒ๋Š” ์šฐ์„  ์ˆœ์œ„์™€ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ์˜ ์‹œ๊ฐ„๊ณผ ๋™๊ธฐ๊ฐ€ ๋ชจ๋‘ ๋งž์ถฐ์ง€๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ๋ชจํ”ผ๋”” 3๋ฅผ ์ œ๋Œ€๋กœ ์‹œ์ž‘ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ํ•ฉ๋ฅ˜ํ•˜๋ฉด ์ข‹๊ฒ ์ง€๋งŒ ๊ธฐ๋Œ€๋Š” ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

๋ชจํ”ผ๋”” 3

2017๋…„ 3์›”์— ์—ฌ๊ธฐ์— ๋งˆ์ง€๋ง‰ ๊ณ„ํš์„ ์ž‘์„ฑํ•œ ์ดํ›„๋กœ Python 3 ์ฑ„ํƒ์ด ์ง€๊ธˆ๊นŒ์ง€ ์ง„ํ–‰๋˜์–ด ๋” ์ด์ƒ Python 2์—์„œ 2+3์„ ๊ฑฐ์ณ Python 3์œผ๋กœ๋งŒ ์ ์ง„์ ์œผ๋กœ ๋‹จ๊ณ„๋ฅผ ๋ฐŸ์•„์•ผ ํ•  ์š”์ ์„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Mopidy 2.x๋Š” 3๋…„ ๋™์•ˆ ์šฐ๋ฆฌ์—๊ฒŒ ์•„์ฃผ ์ข‹์€ ์—ญํ• ์„ ํ–ˆ์œผ๋ฉฐ ์–ด๋–ค ์ด์œ ์—์„œ๋“  Python 2์— ๊ฐ‡ํžŒ ์‚ฌ๋žŒ๋“ค์„ ๋‚จ๊ฒจ๋‘˜ ์ˆ˜ ์žˆ๋Š” ํ›Œ๋ฅญํ•˜๊ณ  ์•ˆ์ •์ ์ธ ์žฅ์†Œ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ 2017๋…„ 3์›”๋ถ€ํ„ฐ ๊ณ„ํš์„ ์ˆ˜์ •ํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ์ƒ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • [x] Mopidy์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํ•ญ๋ชฉ์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋ฌธ์ œ ๋Š” v3.0 ์ด์ •ํ‘œ ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
  • [x] Mopidy๋ฅผ Python 3์œผ๋กœ ์ด์‹ํ•ฉ๋‹ˆ๋‹ค.
  • [x] PyPI์— ๋Œ€ํ•œ ์‹œํ—˜ํŒ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค(์˜ˆ: 3.0.0-rc1). ์ด๊ฒƒ์€ pip install mopidy ์‹คํ–‰ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์ง€๋งŒ ์ด์‹๋œ ํ™•์žฅ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์‹œํ—˜ํŒ์„ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด pip install --pre mopidy ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • [x] Mopidy ์กฐ์ง์˜ ๋ชจ๋“  ํ™•์žฅ์„ Python 3์œผ๋กœ ์ด์‹ํ•˜๊ณ  ์„ ํƒ์ ์œผ๋กœ PyPI๋กœ ์‹œํ—˜ํŒ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • [ ] Python 3์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ํ™•์žฅ์„ ํฌํŠธ/๋„์›€๋ง ํฌํŠธ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋„์ฐฉํ•˜๋ฉด ๋„์›€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • [ ] Mopidy org์—์„œ Mopidy ์ฝ”์–ด ๋ฐ ๋ชจ๋“  ํ™•์žฅ์˜ ์กฐ์ •๋œ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” Python 3 ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ํŠนํžˆ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…์„ ๋•๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ์˜ ๋ฐœ๋„ ๋ฐŸ๊ณ  ์‹ถ์ง€ ์•Š๋‹ค

๋‚˜๋Š” jodal/feature/py3-compat์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ง€์ ์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • Python 3์—์„œ Mopidy๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋Š” Python ๋ฒ„์ „ ํ™•์ธ์„ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.
  • tox.ini ์„ค์ •์„ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Python 2 ๋ฐ Python 3 ๋ชจ๋‘์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Py3 ๋ฌธ์ œ๋ฅผ ๋ชจ๋“ˆ๋ณ„๋กœ ์ˆ˜์ •ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋ฉฐ์น  ์ „์— Mopidy 2.0.0 ์œ„์— ๋ธŒ๋žœ์น˜๋ฅผ ๋‹ค์‹œ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ ๋Š” 11์›” ์ดํ›„๋กœ ์ด๊ฒƒ์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ƒํƒœ๋Š” ์•ฝ 1000๊ฐœ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜์ •ํ–ˆ์œผ๋ฉฐ ์•ฝ 240๊ฐœ์˜ ํ…Œ์ŠคํŠธ๊ฐ€ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ž์œผ๋กœ์˜ ๊ณ„ํš์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๋‚˜๋จธ์ง€ ๋ฌธ์ œ๋ฅผ ๋ชจ๋“ˆ๋ณ„๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ Mopidy 2.x์— ์ตœ๋Œ€ํ•œ ๋งŽ์€ ๋ถ€๋ถ„์„ ์ ์šฉํ•˜์‹ญ์‹œ์˜ค. ํ˜„์žฌ์˜ ๋ชจ๋“ˆ๋ณ„ ์ ‘๊ทผ ๋ฐฉ์‹์€ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๋ฐ”์ดํŠธ ๋Œ€์‹  ์œ ๋‹ˆ์ฝ”๋“œ๋กœ ์œ„ํ˜‘ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝ์ด ํ—ˆ์šฉ๋˜๋Š” 3.0 ๋ฆด๋ฆฌ์Šค๊นŒ์ง€ Mopidy์— ํฌํ•จ๋˜๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š” ์‚ฌํ•ญ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. can't-land-until-3.0 diff๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ์ž‘์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. Python 3์—์„œ Mopidy๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ์—์„œ ๋‹ค๋ฃจ์ง€ ์•Š์€ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

์ข‹์•„, ๋‚˜๋Š” ๊ทธ ์ง€์ ์—์„œ ๋ถ„๊ธฐํ•˜๊ณ  ๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ด๋‹ค

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?

3๋…„ ๋ฐ˜ ๋‚จ์•˜์Šต๋‹ˆ๋‹ค ๐Ÿ˜‰

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

Python 3์œผ๋กœ ํฌํŒ…ํ•˜๋Š” ๊ฒƒ์€ Mopidy์—์„œ ์ž‘์—…ํ•  ๋•Œ ๊ฐœ์ธ์ ์œผ๋กœ ๊ฐ€์žฅ ์šฐ์„ ์‹œํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ œ๊ฐ€ ์ž‘๋…„์— ์ž‘์—…์œผ๋กœ ๊ฝค ๋ฐ”๋นด๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋Œ€๋žต์ ์ธ ์ˆœ์„œ๋กœ ํ˜„์žฌ ๊ณ„ํš์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • [x] Mopidy-MPRIS ํ…Œ์ŠคํŠธ ์ œํ’ˆ๊ตฐ์„ ์ˆ˜์ •ํ•˜์—ฌ ํ–ฅํ›„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์—์„œ ์‚ด์•„๋‚จ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•ฝ๊ฐ„ ์ง€๋ฃจํ•˜๊ณ  ๋‚ด ๋ฌธ ์•ž์˜ ๋งˆ์ผ์ž…๋‹ˆ๋‹ค.
  • [x] Mopidy์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํ•ญ๋ชฉ์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜๊ณ  ์ฃผ์š” ๋ฆด๋ฆฌ์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋ฌธ์ œ๋Š” ์ด ์ด์ •ํ‘œ ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.
  • [x] Mopidy ์กฐ์ง์˜ ๋ชจ๋“  ํ™•์žฅ์ด ์ œ๊ฑฐ ํ›„์—๋„ ๊ณ„์† ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ํ•„์š”ํ•œ ๋ณ€๊ฒฝ ๋ฐ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • [x] Mopidy๋ฅผ Python 2 + 3์œผ๋กœ ์ด์‹ํ•˜๊ณ  ๋˜ ๋‹ค๋ฅธ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • [ ] Mopidy ์กฐ์ง์˜ ๋ชจ๋“  ํ™•์žฅ์„ Python 3์œผ๋กœ๋งŒ ์ด์‹ํ•˜๊ณ  ๋ฆด๋ฆฌ์Šคํ•ฉ๋‹ˆ๋‹ค.
  • [ ] ํฌํŠธ/๋„์›€๋ง์€ Python 3์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ๋ชจ๋“  ํ™•์žฅ๋งŒ ํฌํŒ…ํ•˜๊ณ  ๋ฆด๋ฆฌ์Šค๋ฅผ ์ด‰๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  • [ ] Mopidy ์ž์ฒด์—์„œ Python 2 ์ง€์›์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

๋ณด์‹œ๋‹ค์‹œํ”ผ, ์ด์‹ ์ž์ฒด๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋จผ์ € ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธด ํ•˜์ง€๋งŒ, ๊ฐ€์žฅ ํฐ ์ž‘์—…์€ ์ด๋ฏธ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Python 3์—์„œ ์ž‘์—…ํ•˜๋„๋ก pyspotify๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ณ (์—ฌ๊ธฐ์„œ 2๋…„์˜ ์—ฌ๊ฐ€ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค) Mopidy๋ฅผ GStreamer 1.x๋กœ ์ด์‹ํ•ฉ๋‹ˆ๋‹ค(์—ฌ๊ธฐ์—์„œ ํ•œ ๋ฒˆ์˜ ์œก์•„ ํœด์ง).

๊ฐ€๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค๋งŒ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ๋•๊ณ  ์‹ถ๋‹ค๋ฉด Mopidy๊ฐ€ 2+3์„ ์ง€์›ํ•˜๋Š” ์ฆ‰์‹œ Python 3์— ๋Œ€ํ•œ ํฌํŠธ ํ™•์žฅ์„ ๋•๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, @jodal.

Python3์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์ƒ๊ฐ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” mopidy์—์„œ ์ฒ˜์Œ์ด๊ณ  ๊ทธ๊ฒƒ์— ๊ธฐ์—ฌํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋‚ด๊ฐ€
๋ญ”๊ฐ€ ๋„์™€์ค„ ์ˆ˜ ์žˆ์–ด?

El miรฉ., 3์›” 22์ผ de 2017 a la(s) 07:08, Frederick Gnodtke <
์•Œ๋ฆผ@github.com> ์„ค๋ช…:

์—…๋ฐ์ดํŠธ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. @jodal https://github.com/jodal .

โ€”
์ด ์Šค๋ ˆ๋“œ์— ๊ฐ€์ž…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/mopidy/mopidy/issues/779#issuecomment-288352544 ๋˜๋Š” ์Œ์†Œ๊ฑฐ
์Šค๋ ˆ๋“œ
https://github.com/notifications/unsubscribe-auth/AHQMO8UqLNKzfVQZAZJ3Pnjx2N7MsHg4ks5roPMEgaJpZM4CMq8p
.

์œ ์ง€ ๊ด€๋ฆฌ ๋ถ€๋‹ด์„ ๋œ์–ด์ฃผ๋Š” ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋„์›€์€ ์œ ์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ๋” ํฐ ๋ฌธ์ œ๋ฅผ ์Šค์Šค๋กœ ํ•ด๊ฒฐํ•˜๊ฑฐ๋‚˜ ๋” ํฐ ๊ธฐ์—ฌ์— ๋Œ€ํ•ด ์ ์ ˆํ•œ ์ฝ”๋“œ ๊ฒ€ํ† ๋ฅผ ์ˆ˜ํ–‰ํ•  ์‹œ๊ฐ„์„ ํ™•๋ณดํ•˜๊ธฐ ๋•Œ๋ฌธ์— Python 3๊ณผ ๊ฐ™์€ ํฐ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ƒ๋‹นํžˆ ํ”ผ๊ณคํ•˜๊ณ  ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ์˜ˆ๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌธ์ œ๋ฅผ ๋””๋ฒ„๊น…ํ•˜๊ณ  ๊ฐ€๋Šฅํ•œ ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•˜๊ณ  ์žฌํ˜„ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋‹จ๊ณ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋ฌธ์ œ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฌธ์„œํ™”ํ•˜๋„๋ก ๋•๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jodal ์–ด๋””์—์„œ python3์œผ๋กœ ์ž‘์—…์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฌธ์•ˆ ์ธ์‚ฌ

@jodal ๋‹น์‹ ์ด ์–ธ๊ธ‰ํ•œ py3-compat ๋ธŒ๋žœ์น˜๋Š” ์•ฝ๊ฐ„... ๋ฒ„๋ ค์ง„ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์–ด๋”˜๊ฐ€์— ์ƒˆ๋กœ์šด ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?
ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ์„ ๊ณ ๋ ค ์ค‘์ด๋ฉฐ ๋ถˆ์พŒํ•œ py2 ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ถˆ์•ˆ์ •ํ•œ mopidy ๋ถ„๊ธฐ์—์„œ ์ผ๋ถ€ py3 ๋ฒ„๊ทธ๋ฅผ ํŒŒ๊ณ ๋“œ๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์ƒํƒœ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? python3์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” mopidy ๋ฒ„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ข…์†์„ฑ pylast๋Š” ๊ณง ๋ ˆ๊ฑฐ์‹œ Python 2์— ๋Œ€ํ•œ ์ง€์›์„ ์ค‘๋‹จํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค: https://github.com/pylast/pylast/issues/265

์•ˆ๋…•ํ•˜์„ธ์š”,
ํ˜„์žฌ ๋ฐ๋น„์•ˆ์—์„œ pylast๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋” ์ด์ƒ Python 2.7์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ตœ์‹  ๋ฒ„์ „([1])์„ ์—…๋กœ๋“œํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
mopidy๊ฐ€ ์—ฌ์ „ํžˆ Python 2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ 2์›” ๋ง์— ์ด ๋ฒ„์ „์„ ๊ฒŒ์‹œํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.
mopidy๋Š” ๋†€๋ผ์šด ์†Œํ”„ํŠธ์›จ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์น˜์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ๋Š” ๋‹ค์Œ Debian ๋ฆด๋ฆฌ์Šค์—์„œ:smiley:

์ด๊ฒŒ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋Š” ๊ณต์‹ ์ง€์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ด ์ผ์ด ์ผ์–ด๋‚˜๋„๋ก ๊ธฐ๊บผ์ด ๋•๊ณ  ์‹ถ๋‹ค

๋ฌธ์•ˆ ์ธ์‚ฌ

@jodal ์—ฌ๊ธฐ์— ํ™•์žฅ ๊ธฐ๋Šฅ์ด ์ฐจ๋‹จ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ๊ฐ ํ™•์žฅ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ์—ด๊ณ  ์—ฌ๊ธฐ์—์„œ ์ฐธ์กฐํ•˜์—ฌ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ง€์นจ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด Python์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์‚ฌ๋žŒ๋“ค(์ €์™€ ๊ฐ™์ด)์ด ์—ฌ์ „ํžˆ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”์‹ : ์ œ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ(GMusic, Iris, Podcast, Scrobbler, Spotify)์„ ๋„์™€๋“œ๋ฆด ์ˆ˜ ์žˆ์–ด์„œ ๊ธฐ์ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” ๋ฌด์—‡์„ ํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ๋ˆ„๊ตฐ๊ฐ€ python3์— ๋Œ€ํ•œ ์ ์‘ ์ƒํƒœ๋ฅผ ๋ช…ํ™•ํžˆ ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ฒซ ๋ฒˆ์งธ python3 ๋ฒ„์ „์ด ์–ธ์ œ ์ถœ์‹œ๋ ์ง€ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ ํ•ด์š”.

๋‚˜๋Š” ์—ฌ์ „ํžˆ Mopidy๋ฅผ Python 3์œผ๋กœ ์ด์‹ํ•˜๋Š” ๋ฐ ์ „๋…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” Mopidy๊ฐ€ Python 2์™€ ํ•จ๊ป˜ ์ฃฝ๊ฒŒ ๋‘์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ญ์‚ฌ

์šฐ๋ฆฌ๋ฅผ Python 3์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์€ ๋ชจ๋“  ์ข…์†์„ฑ์ด Python 3์—์„œ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๋…„ ์ „์— ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • Pykka ๋Š” 2011๋…„ Mopidy์—์„œ ์ถ”์ถœ๋œ ์ดํ›„ Python 3๊ณผ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.
  • pyspotify 2.x๋Š” Python 3 ์ง€์› ๋ฐ ์™„์ „ํ•œ libspotify ๋ฐ”์ธ๋”ฉ์„ ์–ป๊ธฐ ์œ„ํ•ด ์™„์ „ํžˆ ์žฌ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ๋งŒ์œผ๋กœ๋„ ์‹œ์ž‘๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๊ฑฐ์˜ 2๋…„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. Spotify๊ฐ€ libspotify์˜ ๋งŽ์€ ๋ถ€๋ถ„์„ ๊นจ๋Š” ๋•๋ถ„์— ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„ ๋ฌดํšจํ™”๋œ ์ž‘์—…์ž…๋‹ˆ๋‹ค.
  • 3๋…„ ์ „ Mopidy 2.0์—์„œ ์ถœ์‹œ๋œ GStreamer 0.10/PyGObject์—์„œ GStreamer 1.x/PyGI๋กœ์˜ Mopidy ์ด์‹์€ ๋‘ ๋ฒˆ์งธ ์œก์•„ ํœด์ง์˜ ์ฃผ์š” ํ”„๋กœ์ ํŠธ์˜€์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์˜ ์˜ค๋žœ ์—ญ์‚ฌ์™€ ๋ฌธ์ œ ์ถ”์ ๊ธฐ์˜ ์ƒํƒœ ์‚ฌ์ด์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋“ฏ์ด, ์ด ํ”„๋กœ์ ํŠธ์™€ ์ผ๋ฐ˜์ ์œผ๋กœ ์˜คํ”ˆ ์†Œ์Šค๋Š” ๋Œ€๊ธฐ์—…์—์„œ ์Šคํƒ€ํŠธ์—…์œผ๋กœ ์ด์งํ•œ ์ดํ›„๋กœ ์ œ ์ตœ์šฐ์„  ์ˆœ์œ„๊ฐ€ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. 3 ๋…„ ์ „.

๊ทธ๋Ÿฌ๋‚˜ ์ฒœ์ฒœํžˆ ๋‹ค์‹œ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ํ•œ ๋ฒˆ์— ํ•œ ํ”„๋กœ์ ํŠธ์— ์ง‘์ค‘ํ•˜๊ณ  ๋‹ค์Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋ฐฐ์†กํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ Mopidy.js ์™€ Mopidy-MPRIS ๋Š” ์•ฝ๊ฐ„์˜ ๋ถ€๋“œ๋Ÿฌ์šด ์‚ฌ๋ž‘๊ณผ ๊ด€์‹ฌ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ €๋Š” Pykka ์˜ ์ƒˆ๋กœ์šด ๋ฆด๋ฆฌ์Šค๋ฅผ ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ž‘์€ ๊ฐœ์„  ์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜๋Š” ๋งŽ์€ Mopidy ์„ค์ •์˜ ์‹œ์ž‘ ์‹œ๊ฐ„์„ ํฐ ์š”์ธ์œผ๋กœ ์ค„์—ฌ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ

Pykka 2๊ฐ€ ์ถœ์‹œ๋˜๋ฉด ์ œ ์ฃผ์š” ๋ชฉํ‘œ๋Š” Mopidy๋ฅผ Python 3์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ ์ž‘์—…์ด ์–ธ์ œ ์™„๋ฃŒ๋  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์˜ˆ์ƒ ์‹œ๊ฐ„์„ ์ œ๊ณตํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์‹คํŒจ์— ๋Œ€๋น„ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ชจ๋‘ ์™ธ๋ถ€ ์š”์ธ๊ณผ ๋™๊ธฐ์— ํฌ๊ฒŒ ์˜์กดํ•ฉ๋‹ˆ๋‹ค.

๋„์›€์„ ์ฃผ๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ธฐ์—ฌ์ž๊ฐ€ ์ง์ ‘ ๋…ธ๋ ฅ์„ ํฌ๊ฒŒ ๋„์šธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ  ๊ทœ์น™์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์˜คํ”ˆ ์†Œ์Šค ์ž‘์—…์œผ๋กœ ๋Œ์•„๊ฐ€์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— PR ๊ฒ€ํ† ๋Š” ์–‘ ๋‹น์‚ฌ์ž์—๊ฒŒ ๊ธˆ์„ธ ์˜์š•์„ ์žƒ๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์—์„œ ์ด์ „์— ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ผ๋ฐ˜์ ์ธ ์œ ์ง€ ๊ด€๋ฆฌ ๋ถ€๋‹ด์„ ์ค„์ด๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๊ฒƒ์€ ํ•ญ์ƒ ๊ฐ„์ ‘์ ์œผ๋กœ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํ•ต์‹ฌ ๊ฐœ๋ฐœ์ž์˜ ๊ฒฝ์šฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ ๋ชจ๋‘์—๊ฒŒ๋Š” ์šฐ์„  ์ˆœ์œ„์™€ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ์˜ ์‹œ๊ฐ„๊ณผ ๋™๊ธฐ๊ฐ€ ๋ชจ๋‘ ๋งž์ถฐ์ง€๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ๋ชจํ”ผ๋”” 3๋ฅผ ์ œ๋Œ€๋กœ ์‹œ์ž‘ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ํ•ฉ๋ฅ˜ํ•˜๋ฉด ์ข‹๊ฒ ์ง€๋งŒ ๊ธฐ๋Œ€๋Š” ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

๋ชจํ”ผ๋”” 3

2017๋…„ 3์›”์— ์—ฌ๊ธฐ์— ๋งˆ์ง€๋ง‰ ๊ณ„ํš์„ ์ž‘์„ฑํ•œ ์ดํ›„๋กœ Python 3 ์ฑ„ํƒ์ด ์ง€๊ธˆ๊นŒ์ง€ ์ง„ํ–‰๋˜์–ด ๋” ์ด์ƒ Python 2์—์„œ 2+3์„ ๊ฑฐ์ณ Python 3์œผ๋กœ๋งŒ ์ ์ง„์ ์œผ๋กœ ๋‹จ๊ณ„๋ฅผ ๋ฐŸ์•„์•ผ ํ•  ์š”์ ์„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Mopidy 2.x๋Š” 3๋…„ ๋™์•ˆ ์šฐ๋ฆฌ์—๊ฒŒ ์•„์ฃผ ์ข‹์€ ์—ญํ• ์„ ํ–ˆ์œผ๋ฉฐ ์–ด๋–ค ์ด์œ ์—์„œ๋“  Python 2์— ๊ฐ‡ํžŒ ์‚ฌ๋žŒ๋“ค์„ ๋‚จ๊ฒจ๋‘˜ ์ˆ˜ ์žˆ๋Š” ํ›Œ๋ฅญํ•˜๊ณ  ์•ˆ์ •์ ์ธ ์žฅ์†Œ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ 2017๋…„ 3์›”๋ถ€ํ„ฐ ๊ณ„ํš์„ ์ˆ˜์ •ํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ์ƒ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • [x] Mopidy์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํ•ญ๋ชฉ์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋ฌธ์ œ ๋Š” v3.0 ์ด์ •ํ‘œ ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
  • [x] Mopidy๋ฅผ Python 3์œผ๋กœ ์ด์‹ํ•ฉ๋‹ˆ๋‹ค.
  • [x] PyPI์— ๋Œ€ํ•œ ์‹œํ—˜ํŒ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค(์˜ˆ: 3.0.0-rc1). ์ด๊ฒƒ์€ pip install mopidy ์‹คํ–‰ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์ง€๋งŒ ์ด์‹๋œ ํ™•์žฅ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์‹œํ—˜ํŒ์„ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด pip install --pre mopidy ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • [x] Mopidy ์กฐ์ง์˜ ๋ชจ๋“  ํ™•์žฅ์„ Python 3์œผ๋กœ ์ด์‹ํ•˜๊ณ  ์„ ํƒ์ ์œผ๋กœ PyPI๋กœ ์‹œํ—˜ํŒ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • [ ] Python 3์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ํ™•์žฅ์„ ํฌํŠธ/๋„์›€๋ง ํฌํŠธ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋„์ฐฉํ•˜๋ฉด ๋„์›€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • [ ] Mopidy org์—์„œ Mopidy ์ฝ”์–ด ๋ฐ ๋ชจ๋“  ํ™•์žฅ์˜ ์กฐ์ •๋œ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

5๊ฐœ์›”์ด ์ง€๋‚ฌ์œผ๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ง€๋‚œ ์‹œ๊ฐ„์— ๋ง์”€๋“œ๋ฆฐ Pykka ๋ฆด๋ฆฌ์Šค๋Š” 6์ฃผ ์ „์— Pykka 2.0์œผ๋กœ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ดํ›„๋กœ ๋‚˜๋Š” ๋‹ค์‹œ Mopidy ์ž‘์—…์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • Bugfix ๋ฆด๋ฆฌ์Šค 2.2.3์ด ์ถœ์‹œ๋˜์—ˆ์œผ๋ฏ€๋กœ ํ˜„์žฌ release-2.2 ๋ถ„๊ธฐ์— ๋ฆด๋ฆฌ์Šค๋˜์ง€ ์•Š์€ ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค.
  • Mopidy 3.0์ด ๋  develop ๋ถ„๊ธฐ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋Œ€๋ถ€๋ถ„์˜ ํ•ญ๋ชฉ์ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์•„๋งˆ๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • [x] ๋กœ๊น… ๋‹จ์ˆœํ™”(#1452)
  • [x] ๋ฐ”์ดํŠธ ์ง€ํ–ฅ Python 2 API์—์„œ ํ…์ŠคํŠธ ์ง€ํ–ฅ Python 3 ํŒŒ์ผ ์‹œ์Šคํ…œ API๋กœ ์ด๋™ํ•  ๋•Œ ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ฒฝ๋กœ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•˜๊ณ  ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. (์•„์ง ์ถ”์ ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.)
  • [x] Python 3์—์„œ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ํ†ต๊ณผ๋ฅผ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

mopidy ์ฝ”์–ด๋‚˜ mopidy-soundcloud ํ”Œ๋Ÿฌ๊ทธ์ธ์ด python3์—์„œ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ง€๊ธˆ๊นŒ์ง€ @jodal์„ ์ด์šฉํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

Python 3 ๋ฒ„์ „์˜ Sphinx๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์„œ๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ๋ฌธ์„œ๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค(ํŒจํ‚ค์ง• ๋ชฉ์ ์œผ๋กœ ์š”์ฒญ)?

๋‚˜๋Š” make -C docs SPHINXBUILD=sphinx-build-2 man ํ–ˆ์ง€๋งŒ sphinx-build-3 ๋Œ€ํ•ด ๋ณ€๊ฒฝํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

make: Entering directory '/home/builder/aports/community/mopidy/src/Mopidy-3.0.0a1/docs'
sphinx-build-3 -b man -d _build/doctrees   . _build/man
Running Sphinx v1.8.4

Configuration error:
The configuration file (or one of the modules it imports) called sys.exit()

์ด๊ฒƒ์€ 2.2.3๊ณผ 3.0.0a1 ๋ชจ๋‘์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ์ด ๋ถ€๋ถ„์ด ์•„์ง ์ด์‹๋˜์ง€ ์•Š์€ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

์–ด์จŒ๋“  v3๊ฐ€ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๊นจ๊ณ  python2๊ฐ€ 1์›”์— ์ข…๋ฃŒ๋œ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ v3์—์„œ python2 ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@tmccombs ๋Š” ๋‹ค์Œ๊ณผ

์–ด์จŒ๋“  v3๊ฐ€ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๊นจ๊ณ  python2๊ฐ€ 1์›”์— ์ข…๋ฃŒ๋œ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ v3์—์„œ python2 ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, ์šฐ๋ฆฌ๋Š” Mopidy 3์—์„œ Python 2 ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•  ๊ณ„ํš์ด ์•„๋‹™๋‹ˆ๋‹ค.

2์›”์˜ ์ €๋ฅผ ์ธ์šฉํ•˜์ž๋ฉด:

2017๋…„ 3์›”์— ์—ฌ๊ธฐ์— ๋งˆ์ง€๋ง‰ ๊ณ„ํš์„ ์ž‘์„ฑํ•œ ์ดํ›„๋กœ Python 3 ์ฑ„ํƒ์ด ์ง€๊ธˆ๊นŒ์ง€ ์ง„ํ–‰๋˜์–ด ๋” ์ด์ƒ Python 2์—์„œ 2+3์„ ๊ฑฐ์ณ Python 3์œผ๋กœ๋งŒ ์ ์ง„์ ์œผ๋กœ ๋‹จ๊ณ„๋ฅผ ๋ฐŸ์•„์•ผ ํ•  ์š”์ ์„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Mopidy 2.x๋Š” 3๋…„ ๋™์•ˆ ์šฐ๋ฆฌ์—๊ฒŒ ์•„์ฃผ ์ข‹์€ ์—ญํ• ์„ ํ–ˆ์œผ๋ฉฐ ์–ด๋–ค ์ด์œ ์—์„œ๋“  Python 2์— ๊ฐ‡ํžŒ ์‚ฌ๋žŒ๋“ค์„ ๋‚จ๊ฒจ๋‘˜ ์ˆ˜ ์žˆ๋Š” ํ›Œ๋ฅญํ•˜๊ณ  ์•ˆ์ •์ ์ธ ์žฅ์†Œ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@PureTryOut ์€ ๋‹ค์Œ๊ณผ

์ด๊ฒƒ์€ 2.2.3๊ณผ 3.0.0a1 ๋ชจ๋‘์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ์ด ๋ถ€๋ถ„์ด ์•„์ง ์ด์‹๋˜์ง€ ์•Š์€ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

Mopidy๋Š” ์•„์ง Python 3์œผ๋กœ ์ด์‹๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹ค๋ฅธ ๋‹จ์ˆœํ™” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋” ์‰ฝ๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์‹์ด ์™„๋ฃŒ๋˜๋ฉด Python 3์—์„œ ์‹คํ–‰๋˜๋Š” Sphinx๋กœ ๋ฌธ์„œ๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ฆด๋ฆฌ์Šค(2.4.0?)๊ฐ€ Python 3๊ณผ ํ˜ธํ™˜๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋ฐฐํฌํŒ์€ Python 2 ํŒจํ‚ค์ง€๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์ž์˜ ๊ฒฝ์šฐ Alpine Linux๋Š” ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค(3.11, ๋‚ด๋…„ 1์›” ๋ง)๊นŒ์ง€ Python 2๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ทธ๋•Œ๊นŒ์ง€ Python 3๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š์œผ๋ฉด Mopidy๊ฐ€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

Mopidy 3.0์€ Python 3๊ณผ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. ์˜ฌํ•ด ๋ง ์ด์ „์— ์ถœ์‹œํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @jodal๋‹˜ , ์•ž์œผ๋กœ ๋ช‡ ์ฃผ ๋™์•ˆ Python 3 ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋ถ„์˜ ์ฃผ๊ธฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. mopidy์—์„œ ์ง์ ‘ ๋˜๋Š” ํ™•์žฅ์—์„œ. ํŠน๋ณ„ํžˆ ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” @zubieta์ž…๋‹ˆ๋‹ค!

์šฐ๋ฆฌ๋Š” ์ตœ๊ทผ์— Python 3์—์„œ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์˜ ~10%๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ํ…Œ์ŠคํŠธ ์„ค์ •์„ ๋ณ‘ํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณง ๋ณ‘ํ•ฉ๋  ๋ช‡ ๊ฐ€์ง€ PR์ด ์žˆ์–ด ์ด๋ฅผ ~20%๋กœ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค. ์–ด๋–ค PR์ด ์ด๋ฏธ ์—ด๋ ค ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์—ฌ ์ž‘์—…์„ ๋ณต์ œํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋ช‡ ๊ฐ€์ง€ ๋ชจ๋“ˆ๊ณผ ํ•ด๋‹น ํ…Œ์ŠคํŠธ๋ฅผ ๋” ์ด์‹ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ๋Š” #1809์˜ ์„ค๋ช…์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

ํ™•์žฅ์€ Mopidy ์ฝ”์–ด๊ฐ€ Python 3์—์„œ ์‹คํ–‰๋˜๋Š” ์ฆ‰์‹œ ๋”ฐ๋ฅผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Mopidy์™€ Python 3์— ๋Œ€ํ•œ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค...

Mopidy 3.0.0a2๋Š” Python 3์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

Mopidy์˜ ํ…Œ์ŠคํŠธ ์ œํ’ˆ๊ตฐ์— ์žˆ๋Š” ๋ชจ๋“  2016 ํ…Œ์ŠคํŠธ๋Š” ์ด์ œ Python 2.7๊ณผ Python 3.7์—์„œ ๋ชจ๋‘ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ์ž‘์—…์€ develop ๋ถ„๊ธฐ์— ๋ณ‘ํ•ฉ๋ฉ๋‹ˆ๋‹ค. ์ด์‹ ์ž‘์—…์„ ๋„์™€์ค€ @kingosticks ์—๊ฒŒ ํฐ ๊ฐ์‚ฌ๋ฅผ ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

๋ฐฉ๊ธˆ develop ๋ถ„๊ธฐ๋ฅผ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ PyPI์— Mopidy 3.0.0a2 ๋กœ

python3.7 -m pip install --pre mopidy

์ด ๋ฆด๋ฆฌ์Šค๋Š” ํ…Œ์ŠคํŠธ ์ œํ’ˆ๊ตฐ์„ ํ†ต๊ณผํ•˜๊ณ  MPD ๋ฐ HTTP์—์„œ ๋ช‡ ๊ฐ€์ง€ ์š”์ฒญ์— ์‘๋‹ตํ•˜๊ณ  ์†Œ์ˆ˜์˜ MP3 ํŒŒ์ผ์„ ์žฌ์ƒํ•˜๋Š” ๊ฒƒ ์™ธ์—๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ „๋ฐฉ ๋„๋กœ :arrow_right:

Mopidy 3.0.0a2๋Š” Python 2์™€ 3์„ ๋ชจ๋‘ ์ง€์›ํ•˜๋Š” ์œ ์ผํ•œ Mopidy ๋ฆด๋ฆฌ์Šค๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰์‹œ Python 2.7 ์ง€์›์„ ์ œ๊ฑฐํ•˜๊ณ  Mopidy๋ฅผ ๋ณด๋‹ค ๊นจ๋—ํ•˜๊ณ  ํ˜„๋Œ€์ ์ธ Python ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ตœ์ข… ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•œ ๊ณ„ํš์€ ๋Œ€๋žต ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • [x] Mopidy์—์„œ Python 2.7 ์ง€์›์„ ์ œ๊ฑฐํ•˜๊ณ  ์ด์‹ ์ž‘์—… ํ›„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • [x] Python 3.8์ด ์ง€์›๋˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
  • [x] Black์œผ๋กœ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํฌ๋งทํ•ฉ๋‹ˆ๋‹ค.
  • [x] ๋˜ ๋‹ค๋ฅธ ์•ŒํŒŒ ๋ฆด๋ฆฌ์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • [ ] v3.0 ์ด์ •ํ‘œ ์˜ ๋ฌธ์ œ ๋ฅผ ์ˆ˜์ • ํ•ฉ๋‹ˆ๋‹ค .
  • [ ] ๋ฒ ํƒ€ ๋ฆด๋ฆฌ์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • [ ] ํ™•์žฅ ๊ธฐ๋Šฅ์˜ ์‚ฌ์šฉ ๋ฐ ์ด์‹์„ ํ†ตํ•ด ๋ฐœ๊ฒฌ๋œ ๋ชจ๋“  ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  • [ ] ๋ฆด๋ฆฌ์Šค ํ›„๋ณด ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค .
  • [ ] ์ถฉ๋ถ„ํžˆ ํฐ ํ™•์žฅ ์„ธํŠธ๊ฐ€ ์ด์‹๋˜๋ฉด ...
  • [ ] ๋ชจํ”ผ๋”” 3.0 ์ตœ์ข… ์ถœ์‹œ .

๋„์›€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค :heart_eyes:

3.0 ์ตœ์ข… ๋ฒ„์ „์„ ํ–ฅํ•œ ํ–‰์ง„๊ณผ ๋ณ‘ํ–‰ํ•˜์—ฌ "mopidy"๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ฐพ์€ PyPI ์˜ ๋‚˜๋จธ์ง€ ๋Œ€ํ•œ ๋„์›€ ์ด

๊ด€์‹ฌ ์žˆ๋Š” ๊ฐ ํ™•์žฅ์— ๋Œ€ํ•ด:

  • [ ] Python์œผ๋กœ ํฌํŠธ >= 3.7. Python 2.7 ์ง€์›์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • [ ] ํ™•์žฅ cookiecutter ์—์„œ ํ”„๋กœ์ ํŠธ ์„ค์ • ํ˜„๋Œ€ํ™”๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ์ผ๋ถ€ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์ง์ ‘ ์ด์‹ํ•˜๊ฒŒ ๋˜๋ฉด ๊ณง ์ฟ ํ‚ค ์ปคํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  • [ ] PyPI์— ๋Œ€ํ•œ ํฌํŠธ์˜ ์‹œํ—˜ํŒ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • [ ] Mopidy 3.0 ์ตœ์ข… ๋ฒ„์ „์ด ๋ฆด๋ฆฌ์Šค๋˜๋ฉด PyPI์— ๋Œ€ํ•œ ์ตœ์ข… ๋ฆด๋ฆฌ์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

76๊ฐœ ์ปค๋ฐ‹, 204๊ฐœ ํŒŒ์ผ ๋ณ€๊ฒฝ, 9832๊ฐœ ์‚ฝ์ž…(+), 9612๊ฐœ ์‚ญ์ œ(-) ์ดํ›„์— ๋˜ ๋‹ค๋ฅธ ์‹œํ—˜ํŒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Mopidy 3.0.0a3์€ ์ด์ œ PyPI์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

python3 -m pip install --pre mopidy

3.0.0a2 ์ดํ›„์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ:

  • ๋งŽ์€ ๋ ˆ๊ฑฐ์‹œ/ํ˜ธํ™˜์„ฑ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜์—ฌ Python 2.7 ์ง€์›์ด ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

    • mopidy.compat ๋ชจ๋“ˆ์ด ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

    • # encoding: utf-8 ๋Œ“๊ธ€์ด ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

    • from __future__ ... ์ˆ˜์ž…ํ’ˆ์ด ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

    • object ์˜ ๋ชจ๋“  ํ•˜์œ„ ๋ถ„๋ฅ˜๊ฐ€ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

    • .encode() ๋ฐ .decode() ์—๋Š” ๋” ์ด์ƒ ๋ช…์‹œ์  "utf-8" ์ธ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์†Œ์Šค ์ฝ”๋“œ๋Š” black ์ž…๋‹ˆ๋‹ค. :๋ธ”๋ž™_ํ•˜ํŠธ:
  • isort ๊ฐ€ ์ด์ œ ๊ตฌ์„ฑ๋˜์—ˆ์œผ๋ฉฐ ํ•„์š”ํ•  ๋•Œ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • mock ๋Š” unittest.mock ๋กœ ๋ฐ”๋€๋‹ˆ๋‹ค.
  • unittest ์–ด์„ค์…˜ ๋ฉ”์„œ๋“œ๋Š” pytest assert ๋ฌธ์œผ๋กœ ๋Œ€์ฒด๋˜์–ด ๋” ๋‚˜์€ ๊ฐ€๋…์„ฑ๊ณผ ๋” ๋‚˜์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • % ๋ฐ .format() ์˜ ๋Œ€๋ถ€๋ถ„์˜ ์ธ์Šคํ„ด์Šค๋Š” f-๋ฌธ์ž์—ด๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ๋ฆฐํ„ฐ๋Š” Python 3์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ์„œ ๋Š” Python 3์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
  • CI์˜ ํ…Œ์ŠคํŠธ๋Š” Python 3.7 ์™ธ์—๋„ Python 3.8์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • setup.py ๊ฐ€ ์ตœ์†Œํ™”๋˜๊ณ  ์„ ์–ธ์  setup.cfg ๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • tox.ini , dev-requirements.txt ๋ฐ docs/requirements.txt ์ข…์†์„ฑ์€ ๋ชจ๋‘ setup.cfg "extras"๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐœ๋ฐœ ์ข…์†์„ฑ์ด ์ด์ œ python3 -m pip install -e ".[dev]" ์™€ ํ•จ๊ป˜ ์„ค์น˜๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์•ž์˜ ๊ธธ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ด์ „ ๋Œ“๊ธ€์—์„œ ์ดˆ์•ˆ์„ ์ž‘์„ฑํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

Mopidy ์ฝ”์–ด์™€ ๊ด€๋ จํ•˜์—ฌ ์—ฌ๊ธฐ์—์„œ ๋๋‚œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Mopidy 3.0 ๊ฒฐ์Šน์ „๊นŒ์ง€์˜ ๋‚˜๋จธ์ง€ ๊ณผ์ •์€ v3.0 ์ด์ •ํ‘œ์—์„œ ์ถ”์ ๋ฉ๋‹ˆ๋‹ค.
https://github.com/mopidy/mopidy/milestone/55

Python 3์— ๋Œ€ํ•œ ์ฃผ์š” ํ™•์žฅ์˜ ์ด์‹์€ ์ด ํ”„๋กœ์ ํŠธ ๋ณด๋“œ์—์„œ ์ถ”์ ๋ฉ๋‹ˆ๋‹ค.
https://github.com/orgs/mopidy/projects/2

๊ฐ€๊นŒ์šด ์‹œ์ผ ๋‚ด์— Python 3์—์„œ Mopidy๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋ฌธ์ œ๋ฅผ ์—ด์–ด์ฃผ์„ธ์š”!

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