Hay varias utilidades - todos con diferentes procedimientos, limitaciones y sistemas operativos de destino - para conseguir un paquete de Python y todas sus dependencias y convertirlos en un solo programa binario que es fácil de enviar a los clientes:¿Incluye una aplicación de Python como un único archivo para admitir complementos o extensiones?
- http://wiki.python.org/moin/Freeze
- http://www.pyinstaller.org/
- http://www.py2exe.org/
- http://svn.pythonmac.org/py2app/py2app/trunk/doc/index.html
Mi situación va un paso más allá: los desarrolladores de terceros querrán escribir complementos, extensiones o complementos para mi aplicación. Por supuesto, es una pregunta desalentadora cómo los usuarios en plataformas como Windows podrían instalar complementos o complementos de manera más sencilla, de modo que mi aplicación pueda descubrir fácilmente que se han instalado. Pero más allá de esa pregunta básica hay otra: cómo un desarrollador de terceros puede agrupar su extensión con las bibliotecas que necesita la extensión (que pueden ser módulos binarios, como lxml) de modo que las dependencias del complemento estén disponibles para su importación al mismo tiempo que el complemento está disponible.
¿Cómo se puede abordar esto? ¿Necesitará mi aplicación su propia área de plug-in en el disco y su propio registro de complementos para que esto sea manejable? ¿O hay mecanismos generales, que podría evitar escribir yo mismo, que permitan que una aplicación que se distribuye como un ejecutable único mire a su alrededor y encuentre complementos que también se instalen como archivos únicos?
¡Gracias por señalar el enfoque de PyCl! ¿Qué hacen sus autores de complementos cuando quieren agrupar dependencias, como la biblioteca "lxml" que mencionó mi pregunta? ¿Qué pasa si dos complementos necesitan "lxml" pero cada paquete tiene una versión ligeramente diferente? ¿Y qué pasa si "lxml" tiene partes binarias que generarán una DLL en Windows pero un .so en Linux? –
Los autores de complementos pueden incluir las dependencias que necesiten en la ruta base de su complemento. Esto funciona porque la ruta del complemento se agrega a sys.path justo antes de que se importe. La única advertencia sería que si un complemento requiere una dependencia específica de la plataforma, el autor del complemento debería tener un paquete para cada arquitectura que esté dispuesto a admitir. También me gustaría mencionar que PyCI incluye métodos (en Plugin()) para recuperar archivos desde el directorio del plugin. Por lo tanto, si un complemento hace uso de contenido estático, puede publicarse incluso si el complemento está en un archivo zip. –