Tengo un script simple que tiene una dependencia en dnspython para el análisis de los archivos de zona. Me gustaría distribuir este script como una sola .py que los usuarios pueden ejecutar tan largo como lo han 2.6/2.7 instalado. No quiero que el usuario instale las dependencias del sitio, ya que puede haber conflictos con los paquetes existentes/versiones, ni quiero ocultar todo con virtualenv. Me preguntaba si había una manera de incrustar un paquete como dnspython dentro de la secuencia de comandos (gzip/base64) y que la secuencia de comandos de acceso de paquete en tiempo de ejecución. Tal vez se descomprime en un directorio en /tmp y añade que a sys.ruta de acceso? No estoy preocupado por el inicio de sobrecarga, solo quiero una sola .py w/todas las dependencias incluidas que puede distribuir.

También, no habría C dependencias de construir, de puro paquetes de python.

Edit: El script no tiene que ser un .py. Tan largo como es un solo archivo ejecutable.

  • Si usted puede relajarse en uno de los archivos de restricción, usted puede apenas paquete de la dnspython de la biblioteca de al lado de su .py archivo, ya sea como un archivo zip o simplemente como un archivo independiente — que podría resolver el problema de dependencia. Están firmes acerca de tener solo 1 archivo?
  • El camino de la licencia, el infierno está pavimentado con incrustación de…
  • Supongo que podría funcionar. Python sería buscar en el directorio actual para el paquete antes de buscar en otra parte (aunque creo que este orden está cambiando en 3). Todavía gustaría que hubiera una manera de empaquetar todas las dependencias como un archivo ejecutable que el usuario puede ejecutar y no tiene ningún problema. Supongo que no tiene que ser un .py.
  • Hay cosas como py2exe y freeze inventado específicamente para el propósito de tener un archivo ejecutable para su distribución. Estos son específicos de la plataforma, sin embargo.
InformationsquelleAutor Jason Keene | 2012-07-11

3 Comentarios

  1. 9

    Puede empaquetar varios archivos de Python en una .de huevo. Huevo de archivos son, básicamente, los archivos zip con metadatos definidos – mira la setuptools la documentación para ver cómo hacer esto. Por el docs usted puede hacer huevo archivos directamente ejecutable por especificando el punto de entrada. Esto le daría un único archivo ejecutable que puede contener el código + cualquier otra dependencia.

    EDIT: Hoy en día recomiendo la creación de un pex para ello. el pex es básicamente un archivo ejecutable archivo zip con los no stdlib dependencias. No contiene una distribución de python (como py2app/py2exe), pero tiene todo lo demás, y puede ser construido con una sola línea de comandos de la invocación. https://pex.readthedocs.org/en/latest/

    • Gracias, yo estaba tratando de obtener un huevo construido con setuptools justo ahora. Nunca ha construido un huevo antes, como siempre he oído que han caído en desuso.
  2. 3

    La forma más sencilla es simplemente poner su secuencia de comandos de python llamado __main__.py con Python puro dependencias en un archivo zip, ejemplo.

    Lo contrario PyInstaller podría ser utilizado para producir un ejecutable independiente.

  3. 1

    por favor, no hagas esto. Si usted NO hacer de esto un hábito.

    • pydns es BDS licencia, pero si tratas de «incrustar» un gpl módulo de esta manera se podría meter en problemas
    • usted puede aprender a utilizar setuptools y usted será mucho más feliz en el largo plazo
    • setuptools se encargará de la instalación de las dependencias identificado (no estoy seguro de si la pydns está utilizando es puro python por lo que podría crear problemas para los usuarios si intenta agregar usted mismo sin conocer su entorno)
    • puede establecer una dirección url o pypi para que la gente pudiera actualizar el script con easy_install -U
    • El paquete que estoy usando es dnspython, no pydns. Si setuptools puede construir de mí un solo distribuible ejecutable que sólo requiere python 2.6/2.7 la voy a utilizar. Si usted está diciendo simplemente lo utiliza para instalar las dependencias de todo el sitio, a continuación, esto no es lo que me estaba pidiendo. dnspython es puro python y no veo nada en ella es la licencia que me impiden su inclusión. Los usuarios finales no son desarrolladores y no saben nada sobre el ecosistema python (setuptools/easy_install/pip/virtaulenv/etc).

Dejar respuesta

Please enter your comment!
Please enter your name here