12

私は非常に大きな一連のpythonモジュールとパッケージをpyoにコンパイルすることを検討しています。PYTHONOPTIMIZE 環境変数を設定するか、起動時に -O を指定することで、これが可能になることを私は知っています。pyc の代わりに pyo を強制して、可能な限り最小のフットプリントを実現したいと思います。私の展開モジュールでそれを行うには、インタープリターを開始する前に環境変数を指定する必要があるため、-O オプションを使用して実際のスクリプトを起動するラッパー スクリプトを作成する必要があります。

これを回避し、pyo の作成をプログラムで強制する方法はありますか?

敬具、トルステン

4

2 に答える 2

24

すべてのモジュールを事前にコンパイルするには、次のコマンドを実行します。

python -O -m compileall /path/to/your/files

pythoncompileallモジュールがコンパイルを処理し、スイッチ-O.pyo ファイルを出力します。

ただし、-O実行ごとにスイッチを指定するPYTHONOPTIMIZE環境変数を設定しない限り、Python にこれらを強制的に使用させることはできません。

-O フラグが行うことは、assertステートメントを無効にして__debug__フラグを に設定することだけであることに注意してくださいFalse(そして、Python はテストを最適化します)。-OO を指定すると、docstring が削除されます。過度の docstring サイズまたは非常に遅いデバッグ コードを使用しない限り、これらは速度の違いやスペースの節約にはなりません。

参照: Python の最適化 (-O または PYTHONOPTIMIZE) は何をしますか?

于 2012-07-13T14:59:14.417 に答える
5

悲しいことに、バージョン 3.5 以降、コンパイルの最適化は .pyc ファイルのみを作成し、.pyo は作成しません。

バージョン 3.5 で変更: legacy パラメータは、optimize の値に関係なく、.pyo ファイルではなく、.pyc ファイルのみを書き出します。

https://docs.python.org/3.6/library/compileall.htmlから

于 2019-04-11T07:35:41.753 に答える