2012-07-06 12 views
13

Empecé a trabajar en una aplicación comercial en Python, y estoy sopesando mis opciones sobre cómo distribuir la aplicación.¿Cuáles son las limitaciones de distribuir archivos .pyc?

Aparte de lo obvio (distribuir fuentes con una licencia comercial apropiada), estoy considerando distribuir solo los archivos .pyc sin sus correspondientes fuentes .py. Pero no estoy lo suficientemente familiarizado con las garantías de compatibilidad de Python para saber si esto es incluso viable, y mucho menos si es una buena idea o no.

¿Hay archivos .pyc independientes del sistema operativo subyacente? Por ejemplo, ¿un archivo .pyc generado en una máquina Linux de 64 bits funcionaría en una máquina con Windows de 32 bits?

He encontrado que .pyc archivo should be compatible across bugfix releases, pero ¿qué hay de las versiones principales y secundarias? Por ejemplo, ¿un archivo generado con Python 3.1.5 sería compatible con Python 3.2.x? ¿O un archivo .pyc generado con Python 2.7.3 sería compatible con una versión de Python 3.x?

Editar:

En primer lugar, voy a tener que apaciguar a las partes interesadas que son fuentes de distribución incómodas. Distribuir .pyc sin fuentes puede darles cierto nivel de comodidad, ya que requeriría el paso adicional de descompilación para llegar a las fuentes, incluso si ese paso es algo trivial. Lo suficiente como una barrera para mantener honestas a las personas honestas.

Respuesta

16

Por ejemplo, ¿un archivo generado con Python 3.1.5 sería compatible con Python 3.2.x?

O sería un archivo generado con .pyc Python 2.7.3 ser compatible con una versión de Python 3.x?

Doubly no.

Estoy considerando distribuir solo los archivos .pyc sin sus correspondientes fuentes .py.

Python bytecode es de alto nivel y trivialmente descompilable.

+0

Me dio curiosidad, ¿hay alguna (recomendada, o alguna) forma de ofuscar de alguna manera el código de Python y distribuirlo? – Levon

+6

@Levon: No sé, no hago cosas tontas como esa. –

+3

Y, sin embargo, todavía te gano :-) – Levon

4

Sin duda podría distribuir los archivos .pyc solamente. Como mencionó Cat, no, no sería compatible con las diferentes versiones principales de Python. Puede evitar que algunas personas vean el código fuente, pero los archivos .pyc son muy fáciles de descompilar. Básicamente, si puedes compilarlo, puedes descompilarlo.

Puede usar un paquete binario como py2exe/py2app/freeze. Nunca los he probado, pero alguien podría descompilarlos si quisieran.

1

Como dijo Cat, los archivos pyc no son seguros para la versión cruzada. Aunque lo que intentas ocultar a los usuarios determina lo que tienes que hacer.

En cuanto al código fuente, no hay una buena manera de ocultar el código fuente de Python en una aplicación distribuida. Si solo intenta ocultar detalles específicos, puede empaquetarlos en una extensión C, lo que sería mucho más difícil de descompilar.

Así que si le preocupa el uso del código, coloque una licencia adjunta al código para no usar o traduzca las secciones que no desea que sean robadas a un lenguaje compilado. Si solo quiere que el código no sea obviamente Python, puede crear un ejecutable binario que envuelva el código de Python (aunque no oculta los detalles reales si alguien los extrae del archivo).

Cuestiones relacionadas