tuple py3exe indexerror index cx_freeze compile python windows dll py2exe

python - indexerror - py3exe



py2exe para generar dlls? (5)

No estoy al tanto de que py2exe sea ​​capaz de hacer eso, ya que creo que en realidad no hace símbolos de objeto de su código de Python, sino que simplemente incorpora el código de byte compilado en un ejecutable con el tiempo de ejecución de Python).

Crear una biblioteca nativa puede requerir un poco más de trabajo (para definir la interfaz C / C ++ para las cosas) con la API de Python-C. Puede ser algo más fácil usar Elmer para eso.

¿Hay alguna manera de usar py2exe o algún otro método para generar archivos dll en lugar de archivos exe?

Quisiera crear básicamente un dll win32 normal con funciones normales, pero estas funciones se codificarían en python en lugar de c ++.


Dudo que py2exe haga esto, ya que se trata de una arquitectura que proporciona un archivo .exe de arranque que despliega el intérprete de python y lo ejecuta.

¿Pero por qué no simplemente incrusta Python en código C y compila ese código como una DLL?


Creo que podrías resolver esto haciendo algo de piratería:

  • Eche un vistazo al módulo zipextimporter en py2exe. Ayuda con la importación de archivos pyd desde un zip.
  • Con eso, puede cargar el archivo de salida de py2exe en su propia aplicación / dll usando raw python-api. (Utilice boost :: python si puede y quiere)
  • Y, dado que el archivo de salida de py2exe es un archivo zip, podrías adjuntarlo al final de tu dll, haciendo que todo esté aún más integrado. (Viejo truco que también funciona con archivos jar).

No probado, pero creo que la teoría es sólida.

Esencialmente, usted vuelve a implementar main () del ejecutable de salida de py2exe en su dll.


Parece que es posible generar una DLL COM desde py2exe:

http://www.py2exe.org/index.cgi/Py2exeAndCtypesComDllServer

23 my_com_server_target = Target( 24 description = "my com server", 25 # use module name for ctypes.com dll server 26 modules = ["dir.my_com_server"], 27 # the following line embeds the typelib within the dll 28 other_resources = [("TYPELIB", 1, open(r"dir/my_com_server.tlb", "rb").read())], 29 # we only want the inproc (dll) server 30 create_exe = False 31 )


Para la posteridad, pude usar Elmer para generar con éxito una DLL útil recientemente. Su sitio tiene un ejemplo de creación de un contenedor DLL que carga el código python . Es muy bueno porque puede cambiar el código python sobre la marcha para cambiar el comportamiento de la DLL para la depuración.

Desafortunadamente, para mí, quería una DLL portátil que funcionara sin instalar Python. Esa parte no funcionó del todo. En lugar de repetir todos los pasos, aquí hay un enlace a la respuesta con los pasos que tomé: https://.com/a/24811840/3841168 . Tuve que distribuir python27.dll, elmer.dll y un par de .pyd junto con mi .dll; también se necesitaba un tiempo de ejecución de .net apropiado, ya que python27.dll generalmente no está vinculado estáticamente. Puede haber una forma de evitarlo incluyendo una gran cantidad de dll, pero no me importó distribuir varias DLL, así que no profundicé demasiado.