Есть ли способ использовать py2exe или какой-либо другой способ генерации файлов dll вместо exe-файлов?py2exe для генерации dll?
Я бы хотел создать нормальную win32 dll с нормальными функциями, но эти функции будут закодированы в python вместо C++.
Есть ли способ использовать py2exe или какой-либо другой способ генерации файлов dll вместо exe-файлов?py2exe для генерации dll?
Я бы хотел создать нормальную win32 dll с нормальными функциями, но эти функции будут закодированы в python вместо C++.
Я думаю, вы могли бы решить эту проблему, делая некоторые взлома:
Не проверено, но я думаю, что теория звучит.
По существу, вы переопределяете основной файл исполняемого файла py2exe в вашей dll.
Я не знаю, что py2exe
может сделать это, так как я считаю, что на самом деле он не делает символы объектов из вашего кода на Python, а просто вставляет скомпилированный байт-код в исполняемый файл с исполняемой программой Python).
Создание собственной библиотеки может потребовать немного больше работы (для определения интерфейса C/C++ для вещей) с помощью API Python-C. Для этого может быть несколько проще использовать Elmer.
Сомневаюсь, что py2exe делает это, так как он создан вокруг создания загрузочного .exe, который выкатывает интерпретатор python и запускает его.
Но почему бы не просто вставить Python в код C и скомпилировать этот код как 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 )
для потомков, я был в состоянии использовать Elmer успешно генерировать полезную DLL в последнее время. Их сайт has an example of building a DLL wrapper that loads python code. Это довольно круто, потому что вы можете изменить код python «на лету», чтобы изменить поведение DLL для отладки.
К сожалению, для меня мне нужна портативная DLL, которая будет работать без установки python. Эта часть не совсем работала из коробки. Вместо того, чтобы повторять все шаги, вот ссылка на ответ с шагами, которые я сделал: https://stackoverflow.com/a/24811840/3841168. Мне пришлось распространять python27.dll, elmer.dll и пару .pyd вместе с моей .dll; также потребовалось присвоенное время выполнения .net, так как python27.dll обычно не статически связаны. Может быть, есть какой-то путь, включая лодку из dll, но я не возражал против распространения нескольких DLL, поэтому я не слишком много вникал в нее.
py2exe имеет 1 выходный путь кода, главный(). Есть ли у вас мысли о том, как указать экспортированные функции/классы с помощью только кода python? Предполагая, что я сделал какую-то аналогичную утилиту py2dll –
Нет. Я не думаю, что вы можете это сделать, не написав C.Я думал, что вы будете запускать py2exe, как обычно, и использовать его выход из библиотеки, но создайте свою собственную dll, которая экспортирует функцию my_pymain, которая делает что-то похожее на исполняемые файлы py2exe. Вы должны иметь возможность украсть этот код из py2exe. – Macke