5

私はpygletで遊んでいます。それは非常にうれしいです。ただし、通常のプレフィックスが付いた実行可能ファイル(game.pyと呼びます)にあるコードを実行すると、

#!/usr/bin/env python

することによって

./game.py

それからそれは少し不格好です。しかし、私がそれを実行すると

python -O ./game.py

また

PYTHONOPTIMIZE=1 ./game.py

その後、その超スムーズ。

最適化なしで実行が遅くなる理由はあまり気にしません。pygletのドキュメントには、最適化によって多数のアサートとOpenGLのエラーチェックが無効になると記載されていますが、そのままにしておくことができます。

私の質問は、Pythonコードを配布する人々が、エンドユーザー(コードのデバッグや変更にまったく関心がない)がコードの最適化されたバージョンを実行することをどのように確認するかです。確かに、リリースノートで最適化を使用していることを確認するように人々に指示するよりも良い方法があります(おそらくとにかく読まないでしょう)?

./gameLinuxでは、エンドユーザー向けにファイルを実行するためのスクリプトを簡単に提供できます。

#!/bin/sh
PYTHONOPTIMIZE=1 ./game.py $*

しかし、それはあまりクロスプラットフォームではありません。

#!行を次のように変更できるようにする必要があるという考えがあります

#!/usr/bin/env PYTHONOPTIMIZE=1 python

また

#!/usr/bin/env python -O

しかし、それらは期待どおりに機能していないようで、Windowsで何ができるかわかりません。

私が知らないコード内から最適化を制御する方法はありますか?何かのようなもの:

  import runtime
  runtime.optimize(True)

マルチプラットフォームのPythonコードを出荷する人々がこの分野でベストプラクティスと見なしているものは何ですか?

4

2 に答える 2

14

「Linux では、./game スクリプトを簡単に提供して、エンド ユーザーにファイルを実行させることができます。」

正しい。

「しかし、それはあまりクロスプラットフォームではありません。」

半正解。重要なシェル言語は 2 つだけです。標準の Linux の「sh」と非標準の Windows の「bat」(別名 cmd.exe) があり、現在はこれだけです。[私が子供の頃、Open VMS DCL と Data General の奇妙なシェル言語と RSX-11 とあらゆる種類の素晴らしいものがありました。Posix標準を神に感謝します.]

ゲーム.sh

python -O game.py

ゲーム.バット

python -O game.py

興味深いことに、ファイルは同じで、拡張子 (およびファイル形式) を変更するだけで、さまざまな OS に対応できます。

万能のクロス プラットフォームが必要な場合は、Python がシェル言語であることを覚えておく必要がありますこういうのも効きます。

game-startup.py

import subprocess
subprocess.Popen( "python -O game.py" )
于 2009-07-07T13:11:41.750 に答える
2

あなたの質問に答えて (S. Lott が完全に行った問題の修正とは対照的に)、多くの場合、Python コードを配布する人々はこれについて心配していないと思います。なぜなら、最適化フラグが影響を与えることはまれだからです。Pyglet は、何年にもわたって Python を使用してきた中で聞いた唯一の例外だと思います。Python docsから引用すると、「現在、オプティマイザはあまり役に立ちません。assert ステートメントを削除するだけです」。

于 2009-07-08T10:25:15.147 に答える