Mopidy: MopidyをPython3に移植する

作成日 2014年07月13日  ·  32コメント  ·  ソース: mopidy/mopidy

Python 3はPythonの未来であり、Mopidyがデプロイされている環境で広く利用できます。私は、Python3.3以降を必要とするasyncioを使用できることに非常に興味があります。 Mopidyプロジェクトの外には、Python3への移行を妨げるものは何もありません。

これは、Python3でMopidyを実行する方法を追跡するためのマスターバグです。

  • 依存関係:

    • [x] PykkaはPython2.6以降、3.2以降をサポートしています。

    • [x] TornadoはPython2.6以降、3.2以降をサポートしています。

    • GStreamer:

    • [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 / GStreamer1.xの上にこれを再実装することにはいくつかの問題があります。

  • コードスタイルをPython2 +3互換に移行します。

    • [x] flake8警告クリーンコード。

    • [x] 2.7より古いすべてのPythonバージョンのサポートを終了します。

    • [x]どこでもfrom __future__ import unicode_literals使用し、バイナリ文字列をb'foo'マークします。

    • [x] 2to3ツールによって特定された移植性の問題を選択的に修正します。

  • 開発サポート:

    • [x] toxを使用してテストを実行すると、Python2.7と並行してPython3テストを簡単に追加できます。

  • Mopidy-Spotify:

    • [x] Python 2.7、3.2以降をサポートする新しいlibspotifyバインディングpyspotify2を実装します。

    • [x] Mopidy-pyspotify2の上にSpotifyを再実装します。

  • Mopidy-MPRIS:

    • [x] libindicateへのpython-indicateバインディングはPyGIに置き換えることができます。

    • [x] python-dbusは、PyGIを介してGDBusに置き換えることができます。

  • 拡張エコシステム:

    • [x] cookiecutter-mopidy-extのテストランナーとしてtoxを使用して、Python3でもテストの実行を開始できるようにします。

    • [] Mopidy自体がPython2 + 3で動作する場合、すべての拡張機能でPython 2 +3サポートのプルリクエストを送信/問題を作成します。

  • [x] 〜all拡張機能がPython 2 + 3をサポートしたら、MopidyでPython2サポートを削除します。
  • [x] Python2ismsを削除します。
  • [x] asyncioなどのPython3の新機能をお楽しみください。
C-enhancement

最も参考になるコメント

私はまだMopidyをPython3に移植することに取り組んでいます。Python2でMopidyを死なせません。

歴史

Python 3に移行する作業のほとんどは、すべての依存関係がPython3で機能することを保証するために何年も前に行われました。

  • Pykkaは、2011年にMopidyから抽出されて以来、Python3と互換性があります。
  • pyspotify 2.xは、
  • 3年前にMopidy2.0でリリースされたGStreamer0.10 / PyGObjectからGStreamer1.x / PyGIへのMopidyの移植は、私の2回目の育児休暇の主要なプロジェクトでした。

この問題の長い歴史と問題追跡システムの状態の行間を読むことができるかもしれませんが、私が大企業での仕事からスタートアップに移行して以来、このプロジェクトと一般的なオープンソースは私の最優先事項ではありませんでした3年前。

しかし、私はゆっくりとオープンソースプロジェクトを再開し始めています。 私は一度に1つのプロジェクトに焦点を合わせ、次のプロジェクトに進む前にそれを出荷しようとしています。 これまでのところ、 Mopidy.jsMopidy-MPRISはいくつかの優しい愛とケアを受けています。 現在、私はPykkaの新しいリリースにます。これは、他の小さな改善の中でも、多くのMopidyセットアップの起動時間を大幅に短縮します。

次は

Pykka 2が出荷されたら、私の主な目標はMopidyをPython3に移行することです。

その作業がいつ完了するかについては、時間の見積もりはしません。それは単に失敗に備えるためです。 それはすべて、外部要因と動機に大きく依存します。

支援に関しては、直接努力を大幅に支援するためにできる新しい貢献者がたくさんいるとは思いません。 私はまだ予測可能で定期的なリズムでオープンソースに取り組むことに戻っていないので、PRレビューはすぐに両方の当事者の意欲をそそるでしょう。 この号で前述したように、一般的なメンテナンスの負担を軽減するための支援は、常に間接的に役立ちます。

他のコア開発者については、彼らが助けてくれると確信していますが、私たち全員に優先順位とプロジェクトがあります。 私たちの時間とモチベーションがすべて揃うのを待ちきれません。 私がMopidy3をきちんと始めたら、彼らが参加すればそれは素晴らしいことですが、私は期待していません。

人生とすべてについての私のとりとめのないことをすべて脇に置いて、これは巨大な仕事でも私がなじみのない仕事でもありません。 これがしばらくの間主な焦点になることができるように、それは主に他の進行中のものを完了することの問題です。

Mopidy 3

2017年3月に最後の計画をここに書いたので、Python 3の採用はこれまでのところ進んでおり、Python2から2 + 3のみを経由してPython3のみに段階的に移行する意味がわかりません。 Mopidy 2.xは3年間非常に役立っており、何らかの理由でPython2に固執したままにしておくのに適した安定した場所になるでしょう。

したがって、2017年3月から計画を修正すると、次のようなプロセスを想像します。

  • [x] Mopidyから非推奨のものをすべて削除します。 詳細な問題については、v3.0マイルストーンを参照してください。
  • [x] MopidyをPython3に移植します。
  • [x] PyPIのプレリリース(例:3.0.0-rc1)を作成します。 これはpip install mopidy実行しているユーザーには影響しませんが、 pip install --pre mopidyを実行して、移植された拡張機能のテスト用のプレリリースをインストールすることは可能です。
  • [x] Mopidy組織のすべての拡張機能をPython3に移植し、オプションでPyPIのプレリリースを作成します。
  • [] Python3に他の拡張機能を移植/ヘルプポートします。ここに到達したらヘルプが必要です。
  • [] MopidyコアとMopidy組織内のすべての拡張機能の調整されたメジャーリリースを作成します。

全てのコメント32件

ねえ、Python 3の移行を手伝いたいのですが、特に進行中のことはありますか? 誰かのつま先を踏みたくない

jodal / feature / py3-compatでブランチを開始しました。

  • Python3でMopidyを起動できないようにするPythonバージョンチェックを更新しました
  • tox.iniの設定を更新しました
  • Py3の問題の修正をモジュールごとに開始し、Python2とPython3の両方でテストを実行します

数日前にMopidy2.0.0の上にブランチをリベースしたことを除いて、11月以来これに触れていません。 現在の状況では、約1000のテストを修正し、残りの約240を修正しました。

今後の計画は次のとおりです。

  1. 残りの問題をモジュールごとに修正します。
  2. すべての問題を修正した経験を生かして、Mopidy2.xで可能な限り多くの問題を解決するようにしてください。 私の現在のモジュールごとのアプローチは、3.0リリースまでMopidyに到達したくないものを変更します(たとえば、ファイルパスをバイトではなくUnicodeとして脅かし始めます)。 can't-land-until-3.0diffは可能な限り小さくする必要があります。
  3. Python 3でMopidyを使用して、テストでカバーされていないすべての問題を見つけます。

わかりました、私はそのブランチから分岐して、私ができるすべてのテストを修正しようとします

こんにちはみんな、この問題に関するニュースはありますか?

これまであと3年半😉

これに関する更新はありますか?

Python 3への移植は、Mopidyで作業するときの私の個人的な最優先のタスクです。問題は、昨年の作業で非常に忙しかったことです。

私の現在の計画は、おおよその順序で、次のとおりです。

  • [x] Mopidy-MPRISテストスイートを修正して、今後の変更に耐えられるようにします。 これは少し退屈で、私の玄関先です。
  • [x] Mopidyから非推奨のものをすべて削除し、メジャーリリースを作成します。 詳細な問題については、このマイルストーンを参照してください。 これを楽しみにしています。
  • [x] Mopidy組織内のすべての拡張機能が削除後も機能することを確認し、必要な変更とリリースを行います。
  • [x] MopidyをPython2 + 3に移植し、別のメジャーリリースを作成します。
  • [] Mopidy組織内のすべての拡張機能をPython3のみに移植してリリースします。
  • [] Port / helpは、他のすべての拡張機能をPython 3のみに移植し、リリースを促します。
  • [] Mopidy自体からPython2サポートを削除します。

ご覧のとおり、移植自体を開始する前に最初に実行する必要のあるタスクがいくつかあります。 とは言うものの、最大の作業はすでに完了しています。pyspotifyをPython 3で動作するように書き直し(ここで2年間の空き時間を費やしました)、MopidyをGStreamer 1.xに移植します(ここで余暇を1回残します)。

そこに着きますが、時間がかかります。 人々が助けたいのであれば、Mopidyが2 + 3をサポートしたらすぐに、Python3へのポート拡張を助けることが最も役立つと思います。

更新してくれてありがとう、@ jodal。

Python3に移行するのは良い考えだと思います。

私はモピディで新しく、それに貢献したことはありません、あなたは私が
何かを手伝うことができますか?

Elmié。、22 demar。 de 2017 a la(s)07:08、Frederick Gnodtke <
[email protected]>escribió:

更新していただきありがとうございます@ jodalhttps ://github.com/jodal


このスレッドにサブスクライブしているため、これを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/mopidy/mopidy/issues/779#issuecomment-288352544 、またはミュート
スレッド
https://github.com/notifications/unsubscribe-auth/AHQMO8UqLNKzfVQZAZJ3Pnjx2N7MsHg4ks5roPMEgaJpZM4CMq8p

メンテナンスの負担の一部を解放するプロジェクトの支援は、Python 3のような大きな目標に役立ちます。これは、メンテナがより大きな問題に取り組むか、より大きな貢献に対して適切なコードレビューを行うための時間を解放するためです。非常に疲れて時間がかかります。 2つの主要な例は、他のユーザーが問題をデバッグし、考えられるバグを再現し、再現に必要な手順を最小限に抑え、問題の結果を文書化するのに役立ちます。

@jodal python3での作業はどこで確認できますか?

よろしく

@jodalあなたが言及したpy3-compatブランチは少し...放棄されたように見えます。 どこかに新しいものはありますか?
私は拡張機能を作成することを検討しており、厄介なpy2の回避策を覚えるよりも、不安定なmopidyブランチのpy3のバグを掘り下げたいと思っています。

これの状況はどうですか? python3で使用できるmopidyのバージョンはありますか?

依存関係のpylastは、レガシーPython 2のサポートを間もなく終了します: https

やあ、
現在、私はDebianでpylastを管理しています。 Python 2.7をサポートしなくなった最新バージョン([1])をアップロードするつもりです
mopidyがまだPython2を使用している場合は、このバージョンを2月末に公開する予定です。
次のDebianリリースでは、mopidyは素晴らしいソフトウェアであるため、残念なことかもしれません:smiley:

これが行われている公式の支店はありますか? 私はこれが起こるのを手伝うつもりです

よろしく

@jodal拡張機能はここでブロッカーですか? もしそうなら、私は各拡張機能に対して問題を開き、追跡するためにここでそれらを参照することをお勧めします。 この問題で、どのような変更が必要になる可能性があるかについていくつかの指示を与えることができれば、Pythonにあまり詳しくない人(私のように)がまだ役立つことを願っています。

PS私が使用している拡張機能(GMusic、Iris、Podcast、Scrobbler、Spotify)を喜んでサポートしますが、現時点ではどうすればよいかわかりません。

みなさん、python3への適応状況を教えていただけませんか? python3の最初のバージョンがいつリリースされるかについての見積もりはありますか? ありがとう。

私はまだMopidyをPython3に移植することに取り組んでいます。Python2でMopidyを死なせません。

歴史

Python 3に移行する作業のほとんどは、すべての依存関係がPython3で機能することを保証するために何年も前に行われました。

  • Pykkaは、2011年にMopidyから抽出されて以来、Python3と互換性があります。
  • pyspotify 2.xは、
  • 3年前にMopidy2.0でリリースされたGStreamer0.10 / PyGObjectからGStreamer1.x / PyGIへのMopidyの移植は、私の2回目の育児休暇の主要なプロジェクトでした。

この問題の長い歴史と問題追跡システムの状態の行間を読むことができるかもしれませんが、私が大企業での仕事からスタートアップに移行して以来、このプロジェクトと一般的なオープンソースは私の最優先事項ではありませんでした3年前。

しかし、私はゆっくりとオープンソースプロジェクトを再開し始めています。 私は一度に1つのプロジェクトに焦点を合わせ、次のプロジェクトに進む前にそれを出荷しようとしています。 これまでのところ、 Mopidy.jsMopidy-MPRISはいくつかの優しい愛とケアを受けています。 現在、私はPykkaの新しいリリースにます。これは、他の小さな改善の中でも、多くのMopidyセットアップの起動時間を大幅に短縮します。

次は

Pykka 2が出荷されたら、私の主な目標はMopidyをPython3に移行することです。

その作業がいつ完了するかについては、時間の見積もりはしません。それは単に失敗に備えるためです。 それはすべて、外部要因と動機に大きく依存します。

支援に関しては、直接努力を大幅に支援するためにできる新しい貢献者がたくさんいるとは思いません。 私はまだ予測可能で定期的なリズムでオープンソースに取り組むことに戻っていないので、PRレビューはすぐに両方の当事者の意欲をそそるでしょう。 この号で前述したように、一般的なメンテナンスの負担を軽減するための支援は、常に間接的に役立ちます。

他のコア開発者については、彼らが助けてくれると確信していますが、私たち全員に優先順位とプロジェクトがあります。 私たちの時間とモチベーションがすべて揃うのを待ちきれません。 私がMopidy3をきちんと始めたら、彼らが参加すればそれは素晴らしいことですが、私は期待していません。

人生とすべてについての私のとりとめのないことをすべて脇に置いて、これは巨大な仕事でも私がなじみのない仕事でもありません。 これがしばらくの間主な焦点になることができるように、それは主に他の進行中のものを完了することの問題です。

Mopidy 3

2017年3月に最後の計画をここに書いたので、Python 3の採用はこれまでのところ進んでおり、Python2から2 + 3のみを経由してPython3のみに段階的に移行する意味がわかりません。 Mopidy 2.xは3年間非常に役立っており、何らかの理由でPython2に固執したままにしておくのに適した安定した場所になるでしょう。

したがって、2017年3月から計画を修正すると、次のようなプロセスを想像します。

  • [x] Mopidyから非推奨のものをすべて削除します。 詳細な問題については、v3.0マイルストーンを参照してください。
  • [x] MopidyをPython3に移植します。
  • [x] PyPIのプレリリース(例:3.0.0-rc1)を作成します。 これはpip install mopidy実行しているユーザーには影響しませんが、 pip install --pre mopidyを実行して、移植された拡張機能のテスト用のプレリリースをインストールすることは可能です。
  • [x] Mopidy組織のすべての拡張機能をPython3に移植し、オプションでPyPIのプレリリースを作成します。
  • [] Python3に他の拡張機能を移植/ヘルプポートします。ここに到達したらヘルプが必要です。
  • [] MopidyコアとMopidy組織内のすべての拡張機能の調整されたメジャーリリースを作成します。

5か月経ちましたので、この号を更新する時期だと思います。 前回お話ししたPykkaのリリースは、6週間前にPykka2.0として出荷されました。 それ以来、私は再びMopidyの作業を開始しました。

  • Bugfixリリース2.2.3がリリースされたため、現在release-2.2ブランチでリリースされていないものはありません。
  • Mopidy3.0になるdevelopブランチでは、廃止されたもののほとんどが削除されました。

次はおそらく:

  • [x]ロギングの簡素化(#1452)
  • [x]バイト指向のPython2APIからテキスト指向のPython3ファイルシステムAPIに移行するときに、ファイルシステムパスを処理する方法を決定して実装します。 (これを追跡する問題はまだありません。)
  • [x] Python3でテストスイートの合格を開始します。

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の互換性を維持する理由はありますか?

いいえ、Mopidy3でPython2の互換性を維持する予定はありません。

2月からの引用:

2017年3月に最後の計画をここに書いたので、Python 3の採用はこれまでのところ進んでおり、Python2から2 + 3のみを経由してPython3のみに段階的に移行する意味がわかりません。 Mopidy 2.xは3年間非常に役立っており、何らかの理由でPython2に固執したままにしておくのに適した安定した場所になるでしょう。

@PureTryOutは言った:

これは、2.2.3と3.0.0a1の両方で発生します。 それとも、この部分はまだ移植されていませんか?

MopidyはまだPython3に移植されていません。 移行を容易にするために、他の簡略化を行っており、廃止されたものを削除しました。 移植したら、Python3で実行されているSphinxを使用してドキュメントを作成します。

次のリリース(2.4.0?)がPython 3と互換性があることを確認することをお勧めしますか? ほとんどのディストリビューションは、Python2パッケージの削除に取り組んでいます。 私の場合、AlpineLinuxは次のリリース(3.11、来年1月末)までにPython 2を削除します。つまり、それまでにPython 3と互換性がない場合、Mopidyはリポジトリから削除されます。

Mopidy3.0はPython3と互換性があります。計画では、年末までにリリースする予定です。

こんにちは@ jodal 、Python 3の機能を支援するために、今後数週間でいくつかの予備のサイクルがあるかもしれません。 直接または拡張機能のいずれかでmopidyで。 取り組むべき特別な問題はありますか?

こんにちは@zubieta!

最近、Python 3でテストスイートの最大10%を正常に実行するテストセットアップをマージしました。すぐにマージされるPRがいくつかあり、それを最大20%に増やします。 どのPRがすでに開いているかを確認して、作業を複製しないようにしてください。さらにいくつかのモジュールとそのテストを移植する方法のステップバイステップガイドについては、#1809の説明を参照してください。

MopidyコアがPython3で実行されるとすぐに、拡張機能が続きます。

MopidyとPython3のステータスを更新する時が来たと思います...

Mopidy3.0.0a2はPython3で実行されます:tada:

Mopidyのテストスイートの2016年のテストはすべて、Python2.7とPython3.7の両方で実行されるようになりました。 この作業はすべてdevelopブランチにマージされます。 移植作業を手伝ってくれた@kingosticksに大いに感謝します!

developブランチをそのままPyPIにMopidy3.0.0a2として

python3.7 -m pip install --pre mopidy

このリリースは、テストスイートに合格し、MPDとHTTP全体でいくつかの要求に応答し、少数のMP3ファイルを再生することを除いて、広範なテストの対象ではありません。

先の道:arrow_right:

Mopidy 3.0.0a2は、おそらくPython 2と3の両方をサポートする唯一のMopidyリリースになるでしょう。Python2.7サポートの削除をすぐに開始し、Mopidyをよりクリーンで最新のPythonコードベースにします。

最終リリースに向けた計画はおおよそ次のとおりです。

  • [x] MopidyからPython 2.7のサポートを削除し、移植作業後にクリーンアップします。
  • [x] Python3.8がサポートされていることを確認してください。
  • [x]ソースコードを黒でフォーマットします。
  • [x]別のアルファリリースを作成します。
  • [] v3.0マイルストーンの問題を修正します。
  • []ベータリリースを作成します。
  • []拡張機能の使用と移植を通じて発見されたバグを修正します。
  • []リリース候補を作成します。
  • []十分な数の拡張機能のセットが移植されたら...
  • []リリースMopidy 3.0ファイナル

必要なヘルプ:heart_eyes:

3.0ファイナルに向けた行進と並行して、「mopidy」を検索して見つかったPyPI上支援

気になる拡張機能ごとに:

  • [] Pythonへのポート> = 3.7。 Python2.7のサポートを削除します。
  • []拡張機能cookiecutterからのプロジェクトセットアップの最新化を含めることを検討してください。 いくつかの拡張機能を自分で移植できるようになったら、すぐにcookiecutterを更新します。
  • [] PyPIへのポートのプレリリースを作成します。
  • [] Mopidy 3.0ファイナルがリリースされたら、PyPIにファイナルリリースを行います。

76のコミット、204のファイルの変更、9832の挿入(+)、9612の削除(-)の後で、別のプレリリースがあります。Mopidy3.0.0a3がPyPIに追加されました。 次のコマンドでインストールできます。

python3 -m pip install --pre mopidy

3.0.0a2以降の新機能:

  • 多くのレガシー/互換性コードを含むPython2.7のサポートはなくなりました。

    • mopidy.compatモジュールはなくなりました。

    • # encoding: utf-8コメントはなくなりました。

    • from __future__ ...インポートはなくなりました。

    • objectサブクラス化はすべてなくなりました。

    • .encode().decode()は、明示的な"utf-8"引数が含まれなくなりました。

  • ソースコードはblackフォーマットされています。 :邪険な心:
  • isortが構成され、必要に応じてインポートをクリーンアップするために使用できます。
  • mockunittest.mock置き換えられます。
  • unittestアサーションメソッドはpytest assertステートメントに置き換えられます。これは、読みやすさとエラーメッセージが向上することを意味します。
  • %.format()ほとんどのインスタンスは、f文字列に置き換えられます。
  • すべてのリンターはPython3で実行されます。
  • ドキュメント
  • CIでのテストは、Python3.7に加えてPython3.8で実行されます。
  • setup.pyは最小化され、宣言型のsetup.cfg置き換えられました。
  • tox.inidev-requirements.txt 、およびdocs/requirements.txt依存関係はすべて、 setup.cfg 「エクストラ」に置き換えられます。 これは、開発者の依存関係が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 評価

関連する問題

ice-bear-forever picture ice-bear-forever  ·  6コメント

ecoCuyo picture ecoCuyo  ·  3コメント

artjeck picture artjeck  ·  11コメント

weilbith picture weilbith  ·  7コメント

Mestelan picture Mestelan  ·  6コメント