web-dev-qa-db-ja.com

pythonプログラムを配布するにはどうすればよいですか?

私のアプリケーションは次のようになります。

 main.py 
 windows /
 __init __。py 
 mainwindow.py 
 ... 
 model /
 __init __。py 
 orders.py 
 ... 
 resources /
 image1.png 
 logo.jpg 
 .. 。

プログラムはmain.pyで開始されます。 「最終」アプリケーションを作成する良い方法はありますか?私はpy2exe/py2appのようなものを考えていますが、pythonインタープリター/モジュールを実行可能ファイルが1つしかないアプリケーションにコピーせずに。

私はdistutilsを見ましたが、これはプログラムをPythonディレクトリにインストールするように見えます。これはLinux以外のプラットフォームでは普通ではありません。

現時点では、ソースフォルダー全体をターゲットマシンにコピーし、main.pyw Windowsの場合。いくつかの不便:

  • アイコンはデフォルトのpythonアイコンです。
  • エイリアスを手動で作成する必要があります。
  • 私のソースディレクトリには、ソース管理フォルダーのような追加のファイルがたくさんあります。
  • 名前を変更する必要がありますmain.pyからmain.pyw手動で。
  • `.pyo *ファイルのみがターゲットマシンにある場合、それは素晴らしいでしょう。それには本当の理由はありません。不必要なファイルを持つのは好きではありません。

どうすれば素敵な自動配信を作成できますか?

  • 窓用? (これが現時点でサポートしなければならない唯一のプラットフォームです。)
  • mac用?
  • linux用?
93
Georg Schölly

Pythonアプリケーションを配布する通常の方法は、 distutils を使用することです。これは、ライブラリタイプpythonモジュール、およびpythonアプリケーションですが、Windowsでの動作はわかりません。Windowsでは、distutilsを使用する場合は、個別にPythonを別途インストールする必要があります。

Linuxではdisutilsで、WindowsではPy2exeまたは同様のもので配布することをお勧めします。 OS Xについては知りません。もしそれがあなたがおそらくディスクイメージタイプのものを望むであろうエンドユーザーアプリケーションであるなら、私はそれをする方法を知りません。ただし、ユーザーエクスペリエンスの詳細については、 この投稿 を参照してください。プログラマー向けに作成されたアプリケーションの場合、OS Xにdistutilsタイプのインストールを使用しても大丈夫でしょう。

34
Lennart Regebro

Pyinstaller を強くお勧めします。これは、すべての主要なプラットフォームをかなりシームレスにサポートします。 py2exeやpy2appのように、Windowsでは標準の実行可能ファイル、OS Xではアプリバンドルを生成しますが、一般的な依存関係を自動解決し、追加の構成調整なしでそれらを含めるという素晴らしい仕事をするという利点もあります。

また、Python 2.6をWindowsにデプロイする場合は、Pyinstallerトランクに このパッチ を適用する必要があります。

インストーラーは必要ないことを示しましたが、 Inno Setup はWindowsプラットフォーム用の使いやすくセットアップが簡単な選択肢です。

60
Daniel Naab

Fredrik Lundh's squeeze.py は、Pythonインタープリターを含まず、代わりにバイトコードを含む単一のファイルを作成できます。正しい引数を使用すると、結果に他のファイル、モジュールなどを含めることができます。 1つのプロジェクトで正常に使用した結果、プログラムはOS X、Linux、Windowsで問題なく実行されました。

[〜#〜] ps [〜#〜]:各マシンには、互換性のあるPythonインタープリターが必要です必要に応じて、Pythonの異なるバージョンに対して異なるバイトコードバージョンを生成できます(適切なバージョンのPythonでsqueeze.pyを実行するだけです)。

5
Eric O Lebigot

間違っているかもしれませんが、IronPythonにはWindows用のコンパイラが組み込まれていませんか?

http://www.ironpython.net

[編集]

Cx_Freezeを試してください。これまでで最高の.pyから.exe(およびいくつかの.dll)コンパイラまで使用しました。

http://cx-freeze.sourceforge.net/

2
Samy Bencherif

[〜#〜] pex [〜#〜] (この質問が受けた注意をより多く考慮し、質問自体を考慮しない)に言及する価値もあると思います。その own description によると:

PEXファイルは自己完結型の実行可能ファイルPython仮想環境です。具体的には、#!/usr/bin/env pythonおよび特別な__main__.pyこれにより、PEXランタイムと対話できます。 Zipアプリケーションの詳細については、 PEP 441 を参照してください。

pythonのパッケージ化の概要 を読んだときに、つまずいた。彼らはこの素敵な写真をそこに投稿しました: enter image description here

要約すると:pythonターゲットマシンにインストールされていることに依存する余裕がある場合は、PEXを使用して自己完結型の"executable"を生成します。 、 例えば。

1
user3389669

Windowsで配布している場合は、 installer を使用して、必要なすべての関連ファイル/ interpeterをインストールします。 setup.exeを配布します。これがWindowsでの最良の方法です。そうしないと、ユーザーは苦情を言います。

1
Byron Whitlock

pythonデスクトップアプリケーションを配布する最も便利な*クロスプラットフォームの方法は、クロスプラットフォームcondaパッケージマネージャーに依存することです。それを使用するいくつかのツールがあります。

  • Miniconda-Install -Minicondaを自動ダウンロードし、アプリの分離されたconda環境を作成するpowershell/bashスクリプト。 pipをサポートしていますが、メンテナンスされていないようで、httpsダウンロードの問題があります。
  • Anaconda Project および (conda)constructor Continuumによる。両方ともcondaを使用します。 (conda)コンストラクターは、自己完結型のインストーラーとNSISインストーラーをWindowsで作成できるように見えますが、pipはサポートしていません。 Anaconda/Minicondaインストーラーのように動作するようです。
  • PyAppShare -エンドユーザーは、Miniconda/Anacondaを最初にインストールします(ランタイム環境など)。次に、単一インストールバッチ/ bashスクリプトは、yaml仕様から分離されたconda環境を作成します。アプリケーションは、環境にインストールされるconda/pipパッケージ自体でもあり、実行可能なエントリポイントが作成されます。クロスプラットフォームのデスクトップとプログラムのショートカットが自動的に作成されます。環境をアクティブにし、アプリケーションを起動します。 pipをサポートします。

*開発者にとって最も便利。エンドユーザーにとって十分に便利です。

0