1

PythonでGUIアプリを開発しています。私はcx_Freeze自分のアプリを OS X ユーザー向けの.app//.dmgファイルに変換するために使用します。したがって、たとえば、ユーザーがアプリをインストールするために使用できるファイルをpython setup.py bdist_dmgcx_Freeze に作成させるために使用できます。.dmg

アプリが自動的に更新されるようになりました。Eskyは、これを行うための有望なフレームワークのようです。python setup.py bdist_esky自分自身を更新するアプリのバージョンを作成することができます。次のディレクトリ構造が生成されます。

  • myapp
  • myapp-0.1/
    • myapp
    • ...
  • ...

最上位myappは、Esky のブートストラップ実行可能ファイルです。現在のディレクトリを検索myapp-0.1/し、最新バージョンとして検索して起動しmyapp-0.1/myappます。

.dmgこれをユーザーに配布できるファイルにパッケージ化するにはどうすればよいですか? 仕事に取り掛かるsetup.pyように変更した後、機能しなくなりました。私が得た印象は、Esky は. そのドキュメントにはファイルについてまったく言及されておらず、Google でも何も見つかりませんでした。bdist_eskybdist_dmgbdist_dmgDMG

最初のステップとして、Esky によって生成されたファイルを手動で OS X.app/バンドルに変換しようとしました。

  • myapp.app/
    • Contents/
      • Info.plist
      • MacOS/
        • myapp
        • myapp-0.1/
          • myapp
          • ...
        • ...

Info.plistOS X を実行するために必要な最小限の情報が含まれていますmyappmyapp.appただし、実行しようとすると、次のようになります。

Traceback (most recent call last):
  File "<string>", line 318, in bootstrap
  File "<string>", line 442, in get_best_version
FileNotFoundError: [Errno 2] No such file or directory: '/Users/michael/Temp/myapp.app/appdata'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<string>", line 689, in <module>
  File "<string>", line 335, in bootstrap
RuntimeError: no usable frozen versions were found

Esky のソース コードを見ると、そのappdir_from_executable(...)関数には OS X バンドル用の特別な処理が含まれているようです。Esky を喜ばせるために、appdata/実際に存在するようにファイルを再配置しようとしました。

  • myapp.app/
    • appdata/
      • myapp-0.1/
        • myapp
        • ...
    • Contents/
      • Info.plist
      • MacOS/
        • myapp
        • ...

残念ながら、これにより別のエラーが発生します。

Traceback (most recent call last):
  File "<string>", line 689, in <module>
  File "<string>", line 336, in bootstrap
  File "<string>", line 363, in chainload
  File "<string>", line 425, in _chainload
UnboundLocalError: local variable 'exc_value' referenced before assignment

これは本当に難しいですか?Esky を使用してファイルを (標準) 形式でユーザーに配布したいのは私だけです.dmg? 私は何が欠けていますか?

4

1 に答える 1