exeファイルの代わりにpy2exeまたは他の方法を使用してdllファイルを生成する方法はありますか?
基本的に、通常の関数を使用して通常の win32 dll を作成したいのですが、これらの関数は C++ ではなく Python でコーディングされます。
py2exeは、Pythonインタープリターをロールアウトして実行するブートストラップ.exeを提供するように構築されているため、これを行うとは思えません。
しかし、PythonをCコードに埋め込んで、そのコードをDLLとしてコンパイルしてみませんか?
py2exe
実際にPythonコードからオブジェクトシンボルを作成するのではなく、コンパイルされたバイトコードをPythonランタイムで実行可能ファイルに埋め込むだけだと信じているため、それができるかどうかはわかりません) 。
ネイティブ ライブラリを作成するには、Python-C API を使用して (物事への C/C++ インターフェイスを定義するために) もう少し作業が必要になる場合があります。そのためにElmerを使用する方がいくらか簡単かもしれません。
後世のために、最近Elmerを使用して、使用可能な DLL を正常に生成することができました。彼らのサイトには、Python コードをロードする DLL ラッパーを作成する例があります。オンザフライで Python コードを変更して、デバッグ用の DLL の動作を変更できるため、非常に優れています。
残念ながら、私は Python をインストールしなくても動作する移植可能な DLL が必要でした。その部分は、そのままではうまく機能しませんでした。すべての手順を繰り返すのではなく、私が行った手順を含む回答へのリンクを次に示します: https://stackoverflow.com/a/24811840/3841168。python27.dll、elmer.dll、およびいくつかの .pyd を .dll とともに配布する必要がありました。通常、python27.dll は静的にリンクされていないため、適切な .net ランタイムも必要でした。大量の dll を含める方法はあるかもしれませんが、複数の DLL を配布してもかまわないので、あまり掘り下げませんでした。
py2exe から COM DLL を生成できるようです。
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 )