Is there a way using py2exe or some other method to generate dll files instead of exe files?
I would want to basically create a normal win32 dll with normal functions but these functions would be coded in python instead of c++.
Is there a way using py2exe or some other method to generate dll files instead of exe files?
I would want to basically create a normal win32 dll with normal functions but these functions would be coded in python instead of c++.
I think you could solve this by doing some hacking:
Not tested, but I think the theory is sound.
Essentially, you reimplement py2exe's output executable's main() in your dll.
I doubt that py2exe does this, as it's architectured around providing a bootstrapping .exe that rolls out the python interpreter and runs it.
But why not just embed Python in C code, and compile that code as a DLL?
I am not aware of py2exe
being able to do that, as I believe that it does not actually make object symbols out of your Python code, but just embeds the compiled byte-code in an executable with the Python runtime).
Creating a native library may require a bit more work (to define the C/C++ interface to things) with the Python-C API. It may be somewhat easier using Elmer for that.
For posterity, I was able to use Elmer to successfully generate a usable DLL recently. Their site has an example of building a DLL wrapper that loads python code. It is pretty cool because you can change the python code on the fly to change the DLL behavior for debugging.
Unfortunately, for me, I wanted a portable DLL that would work without installing python. That part didn't didn't quite work out of the box. Rather than repeating all the steps, here is a link to the answer with the steps I took: https://stackoverflow.com/a/24811840/3841168. I did have to distribute python27.dll, elmer.dll and a couple of .pyd's along with my .dll; an appropriated .net runtime was also needed since the python27.dll is not usually statically linked. There may be some way around including a boatload of dll's, but I didn't mind distributing multiple DLLs, so I didn't dig into it too much.
It looks like it is possible to generate a COM DLL from 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 )