web-dev-qa-db-ja.com

py2exeのクロスプラットフォームの代替

py2exeは素晴らしいので、Windowsシステムで実行するpythonプログラムをパッケージ化したいときはいつでも使用します。

私の質問は、Windowsでプログラムをパッケージ化するために使用できるが、Linuxで実行できる同等のツールはありますか?

15
xorsyst

わかりました、私はこれをしました。少しハッキーですが、私のユースケースでは非常にうまく機能します。

その要点は、ModuleFinderを使用して、インポートされたすべてのモジュールを検索し、システムモジュールをフィルターで除外し、コンパイルして、圧縮することです。

残念ながら、このための私のコードには、この質問とは関係のない追加の複雑さが散らばっているので、動作するプログラムを貼り付けることはできず、いくつかのスニペットだけを貼り付けることができます。

zipfile = ZipFile(os.path.join(dest_dir, Zip_name), 'w', Zip_DEFLATED)
sys.path.insert(0, '.')
Finder = ModuleFinder()
Finder.run_script(source_name)

for name, mod in Finder.modules.iteritems():
    filename = mod.__file__
    if filename is None:
        continue
    if "python" in filename.lower():
        continue

    subprocess.call('"%s" -OO -m py_compile "%s"' % (python_exe, filename))

    zipfile.write(filename, dest_path)
2
xorsyst

ここにも PyInstaller Linux、MacOS、Windowsをサポートしています-私はまだ使用していないので、Linux用のWindowsでパッケージ化できるかどうかはわかりませんが、 手動 可能のようです。

EDIT:[〜#〜] faq [〜#〜] は、からWindowsパッケージを作成できないことを明示的に示していますlinuxとlinuxからのmacosパッケージもありません-他の2つのソースからlinuxパッケージを作成することについては何もありませんが、機能しない可能性があります。

EDIT2:少しグーグルした後、私は cx_freeze を見つけました。これも一見の価値があるかもしれません。

7
BergmannF

私はあなたがそのようなことをすることができるとは本当に疑っています。

できることは、プログラムを実行するために必要なすべてを備えた3つのビルドVMをWindows用、MacOS用、Linux用に構成することです。

次に、py2exe/py2app/pyinstallerのいずれかの組み合わせを使用して、各プラットフォームのディストリビューションを生成します。 3つの異なるパッケージがありますが、それぞれが適切にパックされており、クライアントマシンに他に何もインストールする必要はありません。

5
Bogdan