2011-01-14 14 views
5

Pythonソースファイルを評価のためにテストサーバーにアップロードする必要があるという奇妙な状況がありますが、アプリケーションを複数のファイル/モジュール/パッケージにまとめる必要があります。残念ながら、テストサーバーはコントロールできませんので、コードを含むZIPファイルをアップロードできるように変更することはできません。Pythonアプリケーションを単一のソースファイルにコンパイルする

多数のPythonソースファイルをアプリケーションに取り込み、それらを自動的に単一のソースファイル(または.pycファイル)に縮小する方法はありますか?簡単にするために、1つのファイルのみが「エントリポイント」とみなされ、if __name__ == '__main__'を持っています。最後のファイルはPythonインタプリタによって実行可能でなければならないので、PythonからEXEへのジェネレータは使用できません。

答えて

4

zipファイルをアップロードできない場合は、おそらくhereの提案のいくつかを実行することができます。アイデアは、zipファイルアーカイブの前に置かれたPythonのシバン行(インタプリタでは無視される)を含むスクリプトファイルを作成してアップロードすることです。 Pythonインタプリタにzipファイルを直接読み込ませたり、シェルから実行させたりすることができます。この作業をするには、少なくともPython 2.6を使用する必要があります。ブログの記事で説明したように、Pythonはあなたがサポートする必要があると何が必要な機能であるかのバージョンに応じて、

./testapp.py 

python testapp.py 

かを:いずれかの実行するには

zip testapp.zip * 
echo '#!/usr/bin/env python' | cat - testapp.zip > testapp.py 
chmod 755 testapp.py 

必要な__main__.pyファイルと__init__.pyファイルを組み込んで適切なパッケージを作成し、creにするために、ソースレイアウトにさまざまな調整が必要な場合がありますメインのパッケージディレクトリの外側でシンボリックリンク__main__.pyを食べました。これはちょっとしたことですが、一度作業すれば、テストサーバーがそのような疑似テキストファイルを処理できると仮定して、自動化するのは簡単なはずです。ここで重要な点は、Pythonインタプリタ自体が外部プログラムではなくzipアーカイブを読み込み、解凍していることです。

標準のPOSIXシェルスクリプトを処理できる場合は、ここにのファイルを1つの大きなスクリプト内にすべてラップするスクリプトを作成することもできます。

+0

+1非常にクールなトリック、私は考えられませんでした。 – plundra

+0

非常に滑らかです。ただし、リンクが壊れているようです。その記事はまだありますか? – Cerin

+0

申し訳ありませんが、末尾に 'l'がなく、修正されました。 –

関連する問題