10

元の.pyファイルの代わりにPythonスクリプトのバイトコードバージョン(.pycファイル)のみを配布することは可能ですか?私のアプリはPythonインタープリターを埋め込み、PyImport_Importを呼び出してスクリプトをロードします。.pycファイルを探してインポートするように指示するにはどうすればよいですか?

4

5 に答える 5

12

PythonソースツリーにTools/freezeとして含まれているフリーズツールを使用します。PythonバイトコードをC配列に変換します。Cコンパイラを使用すると、すべてのモジュールを新しいプログラムに埋め込んで、標準のPythonモジュールにリンクすることができます。

フリーズにはCコンパイラが必要であることに注意してください。

その他のユーティリティ:

1- PyInstaller

2- Py2Exe

3-スクイーズ

4 - cx_freeze

effbot.orgの詳細

于 2010-01-13T08:44:41.967 に答える
5

.pyライブラリとそのライブラリを使用する単純な.pyプログラムを作成することでそれを行いました。次に、ライブラリを.pycにコンパイルし、分散しました。プログラムを.pyソースとして、ライブラリをコンパイル済み.pycとして。

于 2010-01-13T08:38:53.343 に答える
5

メインプログラムはC++で記述しているため、Pythonファイルを保護するために必要なことは何でもできます。たとえば、配布用に暗号化してから、ちょうど間に合うように復号化して、Pythonインタープリターにインポートすることができます。

PyImport_Importを使用しているため__import__、ファイルからではなくメモリバッファからモジュールをインポートする独自のフックを作成できます。そのため、.pycファイルへの変換はすべてメモリ内で行われ、ディスク上に理解できるPythonコードはまったくありません。

于 2010-01-13T12:44:11.230 に答える
2

py2exeを使用してスタンドアロンプ​​ログラムを作成する場合、.pycファイルのみを取得するため、これは問題にはなりません。

通常、Pythonに.pycファイルを探すように指示する必要はありませんが、とにかくそうします。新しい.pyソースファイルがある場合にのみ、これが使用されます。

ただし、ソースコードの保護レベルはそれほど高くない場合があります。

于 2010-01-13T08:37:10.860 に答える
2

インタラクティブインタプリタでは、これは自動的に行われます。.pyがない場合でも、.pycは引き続き使用されます。

$ echo 'print "hello"' > test.py
$ python -m compileall .
$ rm test.py
$ python -m test
hello
$

それがAPIで同じように機能するかどうか試してみてください。

追加するために編集:あなたのコード保護がかなり弱いという点で私はBerに同意します。-Oは、プログラムの動作を変更しない場合はdocstringを削除します。これにより、動作の再構築が難しくなる可能性がありますが、実際には何らかのバイトコードの難読化が必要になります。

Python用の既製の難読化ツールが存在するかどうかはわかりませんが、時間を費やしたい/投資できる場合は、これは実行可能に聞こえます(そして、それを行うのが馬鹿げている感じず、独自のインタプリタを出荷できます)。

于 2010-01-13T08:46:06.240 に答える