Pensé que escuché que py2exe fue capaz de hacer esto, pero nunca lo descubrí. ¿Alguien ha hecho esto con éxito? ¿Puedo ver su archivo setup.py y qué opciones de línea de comando utilizó?
Básicamente, estoy pensando en que me dé un solo archivo ejecutable que haga algo como descomprimirse en tal vez / temp y se ejecute.
Respuestas:
PyInstaller creará un único archivo .exe sin dependencias; usa la
--onefile
opción Para ello, empaqueta todas las bibliotecas compartidas necesarias en el ejecutable y las desempaqueta antes de que se ejecute, tal como lo describe (EDITAR: py2exe también tiene esta característica, consulte la respuesta de minty )Uso la versión de PyInstaller de svn, ya que la última versión (1.3) está algo desactualizada. Ha funcionado realmente bien para una aplicación que depende de PyQt, PyQwt, numpy, scipy y algunas más.
fuente
La forma de hacer esto usando py2exe es usar la opción bundle_files en su archivo setup.py. Para un solo archivo, querrá establecerlo
bundle_files
en 1,compressed
en Verdadero, y establecer la opción de archivo comprimido en Ninguno. De esa manera crea un archivo comprimido para una distribución fácil.Aquí hay una descripción más completa de la opción bundle_file citada directamente desde el sitio py2exe *
Aquí hay un ejemplo de setup.py:
fuente
windows = [{'script': "single.py"}]
conconsole = ['single.py']
lo que hacer doble clic en el archivo se abrirá en una ventana CMD en Windows.Como menciona el otro póster, py2exe, generará un archivo ejecutable + algunas bibliotecas para cargar. También puede tener algunos datos para agregar a su programa.
El siguiente paso es usar un instalador, para empaquetar todo esto en un programa fácil de usar instalable / ininstalable.
He usado InnoSetup ( http://www.jrsoftware.org/isinfo.php ) con deleite durante varios años y para programas comerciales, así que lo recomiendo encarecidamente.
fuente
He podido crear un único archivo exe con todos los recursos integrados en el exe. Estoy construyendo sobre ventanas. eso explicará algunas de las llamadas al sistema os que estoy usando.
Primero intenté convertir todas mis imágenes en bitmats y luego todos mis archivos de datos en cadenas de texto. pero esto causó que el exe final fuera muy, muy grande.
Después de googlear durante una semana, descubrí cómo alterar el script py2exe para satisfacer mis necesidades.
aquí está el enlace del parche en sourceforge que envié, publique comentarios para que podamos incluirlo en la próxima distribución.
http://sourceforge.net/tracker/index.php?func=detail&aid=3334760&group_id=15583&atid=315583
esto explica todos los cambios realizados, simplemente agregué una nueva opción a la línea de configuración. Aquí está mi setup.py.
Intentaré comentarlo lo mejor que pueda. Tenga en cuenta que mi setup.py es complejo debido al hecho de que tengo acceso a las imágenes por nombre de archivo. así que debo almacenar una lista para hacer un seguimiento de ellos.
Esto es de un protector de pantalla de querer b que estaba tratando de hacer.
Uso exec para generar mi configuración en tiempo de ejecución, es más fácil cortar y pegar así.
Descompostura
script = script py quiero pasar a un exe
icon_resources = el icono para el exe
file_resources = archivos que quiero incrustar en el exe
other_resources = una cadena para incrustar en el exe, en este caso una lista de archivos.
opciones = opciones de py2exe para crear todo en un archivo exe
bitmap_strings = una lista de archivos para incluir
Tenga en cuenta que file_resources no es una opción válida hasta que edite su archivo py2exe.py como se describe en el enlace anterior.
La primera vez que intenté publicar código en este sitio, si me equivoco, no me llame.
ok, eso es todo para el setup.py ahora la magia necesitaba acceder a las imágenes. Desarrollé esta aplicación sin py2exe en mente y luego la agregué más tarde. así verás acceso para ambas situaciones. Si no se encuentra la carpeta de imágenes, intenta extraer las imágenes de los recursos exe. El código lo explicará. esto es parte de mi clase de sprite y usa un directx. pero puede usar cualquier API que desee o simplemente acceder a los datos sin procesar. no importa
Cualquier pregunta fue libre de hacer.
fuente
\'file_resources': [('txt2.txt')]
me da un error (el archivo que quiero incrustar en mi .exe se llama txt2 y es un archivo .txt )Debe crear un instalador, como se mencionó anteriormente. Aunque también es posible dejar que py2exe agrupe todo en un solo ejecutable, estableciendo la opción bundle_files en 1 y el argumento de la palabra clave zipfile en None, no lo recomiendo para las aplicaciones PyGTK.
Esto se debe a que GTK + intenta cargar sus archivos de datos (locales, temas, etc.) desde el directorio desde el que se cargó. Por lo tanto, debe asegurarse de que el directorio de su ejecutable contenga también las bibliotecas utilizadas por GTK + y los directorios lib, share, etc. de su instalación de GTK +. De lo contrario, tendrá problemas para ejecutar su aplicación en una máquina donde GTK + no está instalado en todo el sistema.
Para más detalles, lea mi guía de py2exe para aplicaciones PyGTK . También explica cómo agrupar todo, pero GTK +.
fuente
Me dijeron que bbfreeze creará un único archivo .EXE, y es más nuevo que py2exe.
fuente
Recientemente usé py2exe para crear un ejecutable para la revisión posterior para enviar revisiones a ReviewBoard.
Este fue el setup.py que usé
Creó un directorio que contiene el archivo exe y las bibliotecas necesarias. No creo que sea posible usar py2exe para obtener un solo archivo .exe. Si lo necesita, primero deberá usar py2exe y luego usar algún tipo de instalador para hacer el ejecutable final.
Una cosa a tener en cuenta es que cualquier archivo de huevo que use en su aplicación debe descomprimirse, de lo contrario, py2exe no puede incluirlos. Esto está cubierto en los documentos de py2exe.
fuente
intente congelar c_x puede crear un buen independiente
fuente
No, no te da un solo ejecutable en el sentido de que solo tienes un archivo después, pero tienes un directorio que contiene todo lo que necesitas para ejecutar tu programa, incluido un archivo exe.
Acabo de escribir este setup.py hoy. Solo necesitas invocar
python setup.py py2exe
.fuente