Pergunta

Existe uma maneira usando py2exe ou algum outro método para gerar arquivos DLL em vez de arquivos exe?

Eu gostaria de criar basicamente uma dll normal, win32 com as funções normais, mas estas funções seria codificado em python em vez de c ++.

Foi útil?

Solução

Eu acho que você poderia resolver isso fazendo alguns hackers:

  • Dê uma olhada no módulo zipextimporter em py2exe. Ela ajuda com a importação de PYD-arquivos de um zip.
  • Usando isso, você pode ser capaz de arquivo de saída de carga do py2exe em seu próprio app / dll usando matéria-python-api. (Use boost :: python se você pode e quer)
  • E, uma vez outputfile de py2exe é um zip, você pode anexá-lo no final de sua DLL, fazendo a coisa toda ainda mais integrado. (Velho truque que funciona com arquivos jar também.)

Não testado, mas acho que a teoria é som.

Essencialmente, você reimplementar executável saída de py2exe main () em sua dll.

Outras dicas

duvido que py2exe faz isso, como é arquitetado em torno de fornecer um .exe bootstrapping que rola para fora do interpretador Python e executa-lo.

Mas por que não incorporar Python em código C, e compilar esse código como um DLL?

Eu não tenho conhecimento de py2exe ser capaz de fazer isso, como eu acredito que ele não realmente fazer símbolos de objetos fora de seu código Python, mas apenas incorpora o byte-code compilado em um executável com o tempo de execução Python).

A criação de uma biblioteca nativa pode exigir um pouco mais de trabalho (para definir a interface do C / C ++ para as coisas) com a API do Python-C. Pode ser um pouco mais fácil usando Elmer para isso.

Para a posteridade, eu era capaz de usar Elmer para gerar sucesso uma DLL utilizável recentemente. Seu site tem um exemplo de construção de uma DLL de mensagens publicitárias que carrega o código python . Ele é muito legal porque você pode alterar o código python em tempo real para alterar o comportamento DLL para depuração.

Infelizmente, para mim, eu queria uma DLL portátil que iria trabalhar sem instalar python. Essa parte não não chegou a trabalhar fora da caixa. Em vez de repetir todos os passos, aqui está um link para a resposta com os passos que tomou: https://stackoverflow.com/a/ 24811840/3841168 . Eu tive que distribuir python27.dll, elmer.dll e um par de de .pyd juntamente com minha .dll; um tempo de execução .net apropriou também foi necessária uma vez que o python27.dll geralmente não é estaticamente ligado. Pode haver alguma maneira de contornar incluindo um barco cheio de dll, mas eu não me importava distribuir várias DLLs, então eu não cavar muito.

Parece que é possível gerar uma DLL COM a partir 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     )
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top