Domanda

Ho giocato con pyglet . È molto carino. Tuttavia, se corro il mio codice, che si trova in un file eseguibile (lo chiamano game.py) preceduto con il solito

#!/usr/bin/env python

facendo

./game.py

quindi è un po 'goffo. Ma se l'eseguo con

python -O ./game.py

o

PYTHONOPTIMIZE=1 ./game.py

allora la sua super-liscio.

Sono non importa molto perché scorre lenta senza ottimizzazione; la documentazione di pyglet afferma che l'ottimizzazione disabilita numerose afferma e anche il controllo degli errori di OpenGL, e io sono felice di lasciare le cose come stanno.

La mia domanda è: come fanno le persone che distribuiscono codice Python assicurarsi che gli utenti finali (con interesse zero nel debug o la modifica del codice) esegue la versione ottimizzata del codice. Sicuramente c'è un modo migliore di dire alla gente solo per assicurarsi che essi utilizzano l'ottimizzazione nelle note di rilascio (che probabilmente non leggeranno in ogni caso)?

Su Linux mi può facilmente fornire uno script ./game per eseguire il file per gli utenti finali:

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

, ma che non è molto multi-piattaforma.

Ho un'idea dovrei essere in grado di cambiare la linea #! a

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

o

#!/usr/bin/env python -O

ma quelli non sembrano funzionare come previsto, e non sono sicuro cosa farebbero su Windows.

C'è qualche modo di controllare l'ottimizzazione all'interno del codice che sono a conoscenza di? Qualcosa di simile:

  import runtime
  runtime.optimize(True)

quello che è considerato migliori pratiche in questo settore da parte di persone di spedizione multi-piattaforma codice Python?

È stato utile?

Soluzione

"Su Linux Posso facilmente fornire uno script ./game per eseguire il file per gli utenti finali:"

Una corretta.

"ma che non è molto cross-platform."

Mezzo-corretto. Ci sono esattamente due lingue di shell che contano. Linux standard "sh" e non-standard di Windows "bat" (a / k / a cmd.exe) e che è tutto quello che c'è al giorno d'oggi. [Quando ero un ragazzino, c'era Open VMS DCL e il linguaggio strano guscio di Data General e RSX-11 e tutti i tipi di grandi cose. Grazie a Dio per lo standard Posix.]

game.sh

python -O game.py

game.bat

python -O game.py

È interessante notare che i file sono gli stessi, solo l'estensione (e il formato di file) hanno dovuto essere modificato per rendere le varie del sistema operativo felice.

Se si desidera true one-size-fits-all cross platform, si deve ricordare che Python è un linguaggio di shell. Questo genere di cose funziona, anche.

game-startup.py

import subprocess
subprocess.Popen( "python -O game.py" )

Altri suggerimenti

rispondere alla tua domanda (come opporsi a fissare il vostro problema, che S. Lott ha fatto perfettamente), credo che un sacco di tempo le persone che distribuiscono codice Python non ti preoccupare di questo, perché è raro che il flag di ottimizzazione di avere alcun effetto. Credo pyglet è l'unica eccezione che ho sentito parlare di in anni di utilizzo di Python. Citando dal Python docs , "L'ottimizzatore attualmente non aiuta molto , ma rimuove solo affermare dichiarazioni"

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top