2009-02-15 15 views
11

exe ​​dosyaları yerine dll dosyaları oluşturmak için py2exe veya başka bir yöntem kullanarak bir yolu var mı?py2exe?

Normal işlevlerle normal bir win32 dll oluşturmak istiyorum ancak bu işlevler C++ yerine python olarak kodlanacaktı.

cevap

6

Biraz hack yaparak bu çözebilir düşünüyorum:

  • py2exe'nin zipextimporter modülünde bir göz atın. Bir ZIP'den pyd dosyalarını içe aktarmaya yardımcı olur.
  • Bunu kullanarak, py2exe'nın çıktı dosyasını raw python-api kullanarak kendi uygulamanıza/dll'e yükleyebilirsiniz. (Kullanabildiğiniz takdirde boost :: python kullanın)
  • Ve, py2exe'nin outputfile bir fermuar olduğu için, dll'inizin sonuna ekleyebilirdiniz, bu da tüm şeyi daha da bütünleştirir. (Kavanoz dosyaları ile çalışan eski numara.)

Test edilmedi, fakat teorinin sağlam olduğunu düşünüyorum.

Esas olarak, dll'nizde py2exe'nin çıktı çalıştırıcısını ana() yeniden düzenlersiniz. o py2exe bir COM DLL oluşturmak mümkündür gibi

+0

py2exe, 1 kod çıkış yoluna sahiptir, ana(). Dışa aktarılan işlevleri/sınıfları sadece python koduyla belirtmenin bir yolu var mı? Benzer bir yardımcı program py2dll –

+0

Hayır yaptığımız varsayalım. Ben bazı C yazmadan bunu yapabileceğini düşünmüyorum.Py2exe'yi her zamanki gibi çalıştırdığınızı düşünüyordum ve bunun kütüphane çıktılarını kullanmasına rağmen, py2exe'nin çalıştırılabilirlerine benzer bir şey yapan 'my_pymain' işlevini dışa aktaran kendi dll kodunuzu yazabilirsiniz. Bu kodu py2exe'den çalabilmelisiniz. – Macke

4

Bunu yapabilmem için py2exe yapamıyorum, aslında Python kodunuzdan nesne simgelerini yapmıyor, ancak derlenmiş bir bayt kodunu Python yürütme süresine sahip bir yürütülebilir dosyada gömüyoruz).

Yerel kitaplık oluşturmak, Python-C API'siyle biraz daha fazla çalışma gerektirebilir (C/C++ arabirimini nesneler için tanımlayabilir). Bunun için Elmer'u kullanmak biraz daha kolay olabilir.

5

Bu py2exe, python yorumlayıcısını açan ve çalıştıran bir bootstrapping .exe sağlama etrafında yapılandırıldığı için bunu yapar.

Ancak neden sadece Python'u C koduna gömmeyin ve bu kodu bir DLL olarak derleyelim?

0

görünüyor: kuşaklar için

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 ) 
1

, başarıyla son zamanlarda kullanılabilir bir DLL oluşturmak için Elmer kullanmayı başardı. Siteleri has an example of building a DLL wrapper that loads python code. Bu oldukça iyidir çünkü hata ayıklama için DLL davranışını değiştirmek için python kodunu anında değiştirebilirsiniz.

Ne yazık ki, benim için, python yüklemeden çalışacak taşınabilir bir DLL istedim. Bu bölüm kutudan hiç çıkmamıştı. Tüm adımları tekrarlamak yerine, attığım adımlarla yanıtın bir bağlantısı: https://stackoverflow.com/a/24811840/3841168. python27.dll, elmer.dll ve .pyd bir çift ile birlikte .dll; Python27.dll genellikle statik olarak bağlı olmadığı için uygun bir .net runtime da gerekliydi. Dll's bir tekne yükü dahil etrafında bir yolu olabilir, ama ben çok fazla DLL dağıtma aldırmadım, bu yüzden çok fazla kazmadım.

İlgili konular