Есть ли способ использовать py2exe или какой-либо другой метод для создания файлов dll вместо exe файлов?
Я бы хотел создать обычную dll win32 с нормальными функциями, но эти функции будут закодированы в python вместо С++.
Есть ли способ использовать py2exe или какой-либо другой метод для создания файлов dll вместо exe файлов?
Я бы хотел создать обычную dll win32 с нормальными функциями, но эти функции будут закодированы в python вместо С++.
Я думаю, вы могли бы решить это, совершив некоторые взломы:
Не тестировалось, но я думаю, что теория звучит.
По существу, вы переопределяете исполняемый файл main() py2exe в своей DLL.
Я сомневаюсь, что py2exe делает это, поскольку он проектирует вокруг создания загрузочного .exe, который выкатывает интерпретатор python и запускает его.
Но почему бы не просто вставить Python в C-код и скомпилировать этот код как DLL?
Я не знаю, как py2exe
быть в состоянии сделать это, поскольку я считаю, что на самом деле он не делает объектные символы из вашего кода на Python, а просто внедряет скомпилированный байт-код в исполняемый файл с исполняемой программой Python).
Создание собственной библиотеки может потребовать немного больше работы (для определения интерфейса C/С++ для вещей) с помощью API Python-C. Это может быть несколько проще с помощью Elmer для этого.
Для потомков я смог использовать Elmer для успешного создания полезной DLL в последнее время. На их сайте есть пример построения DLL-оболочки, которая загружает код python. Это довольно круто, потому что вы можете изменить код python "на лету", чтобы изменить поведение DLL для отладки.
К сожалению, для меня мне нужна портативная DLL, которая будет работать без установки python. Эта часть не совсем работала из коробки. Вместо того, чтобы повторять все шаги, вот ссылка на ответ с шагами, которые я сделал: fooobar.com/questions/460619/.... Мне пришлось распространять python27.dll, elmer.dll и пару .pyd вместе с моей .dll; также потребовалось присвоенное время выполнения .net, так как python27.dll обычно не статически связаны. Возможно, есть какой-то путь, включая лодку из dll, но я не возражал против распространения нескольких библиотек DLL, поэтому я не вникал в это слишком много.
Похоже, что можно создать COM-DLL из 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 )