загрузить DLL из питона - PullRequest
       39

загрузить DLL из питона

2 голосов
/ 21 октября 2008

Я создаю приложение на Python из некоторого исходного кода, который нашел Здесь

Мне удалось скомпилировать и исправить некоторые проблемы с помощью поиска в Интернете, но я застрял в этой точке:

При запуске приложения появляется это сообщение.

альтернативный текст http://img511.imageshack.us/img511/4481/loadfr0.png

Это приложение на Python использует swig для ссылки на код c / c ++.

У меня есть VC ++ 2005, экспресс-выпуск, который я использовал для компиляции вместе со scons и Python 2.5 (и пробовал 2.4 тоже)

DLL-файлы, которые пытаются загрузить, - это «msvcr80.dll», потому что до появления сообщения «msvcr80.dll» не удалось найти или что-то в этом роде, поэтому я получил его и бросил в папку window32.

Для того, что я прочитал здесь: http://msdn.microsoft.com/en-us/library/ms235591(VS.80).aspx

Решение - запустить MT с манифестом и файлом dll. Я уже это сделал и тоже не работает.

Может ли кто-нибудь указать мне правильное направление?

Это содержимое манифеста:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
</assembly>

Я собираюсь попробовать Python 2.6 сейчас, я не совсем уверен в понимании проблемы, но Python 2.5 и Python 2.5 .exe содержали строку "MSVCR71.dll" внутри файла .exe. Но, вероятно, это не имеет ничего общего.

пс. если бы все было так просто, как jar-файлы :(

Это трассировка стека для полноты

None
INFO:root:Skipping provider enso.platform.osx.
INFO:root:Skipping provider enso.platform.linux.
INFO:root:Added provider enso.platform.win32.
Traceback (most recent call last):
  File "scripts\run_enso.py", line 24, in <module>
    enso.run()
  File "C:\oreyes\apps\enso\enso-read-only\enso\__init__.py", line 40, in run
    from enso.events import EventManager
  File "C:\oreyes\apps\enso\enso-read-only\enso\events.py", line 60, in <module>
    from enso import input
  File "C:\oreyes\apps\enso\enso-read-only\enso\input\__init__.py", line 3, in <module>
    _input = enso.providers.getInterface( "input" )
  File "C:\oreyes\apps\enso\enso-read-only\enso\providers.py", line 137, in getInterface
    interface = provider.provideInterface( name )
  File "C:\oreyes\apps\enso\enso-read-only\enso\platform\win32\__init__.py", line 48, in provideInterface
    import enso.platform.win32.input
  File "C:\oreyes\apps\enso\enso-read-only\enso\platform\win32\input\__init__.py", line 3, in <module>
    from InputManager import *
  File "C:\oreyes\apps\enso\enso-read-only\enso\platform\win32\input\InputManager.py", line 7, in <module>
    import _InputManager
ImportError: DLL load failed: Error en una rutina de inicializaci¾n de biblioteca de vÝnculos dinßmicos (DLL).

Ответы [ 4 ]

2 голосов
/ 21 октября 2008

Глядя на ваше обновление, похоже, что вам нужно установить Pycairo , поскольку вам не хватает модуля _cairo, установленного как часть Pycairo. На странице Pycairo загрузок приведены инструкции по получению / установке бинарных файлов для Windows.

0 голосов
/ 21 октября 2008

Мне удалось скомпилировать и запустить Enso, используя / LD в качестве флага компилятора. Это динамически связывается со средой выполнения MS Visual C ++ и, кажется, позволяет вам обходиться без манифеста.

Если вы используете SCons, посмотрите файл сравнения здесь: http://paste2.org/p/69732

0 голосов
/ 21 октября 2008

обновление Я скачал python2.6 и VS C ++ Express Edition 2008, и проблема с msvcr80.dll исчезла (я предполагаю, что Python и VSC ++ 2008xe используют msvscr90.dll)

Я скомпилировал с / LD и все изменения, перечисленные здесь: http://paste2.org/p/69732

А теперь возникает проблема:

INFO:root:Skipping provider enso.platform.osx.
INFO:root:Skipping provider enso.platform.linux.
INFO:root:Added provider enso.platform.win32.
INFO:root:Obtained interface 'input' from provider 'enso.platform.win32'.
Traceback (most recent call last):
  File "scripts\run_enso.py", line 23, in <module>
    enso.run()
  File "C:\oreyes\apps\enso\enso-comunity\enso\__init__.py", line 41, in run
    from enso.quasimode import Quasimode
  File "C:\oreyes\apps\enso\enso-comunity\enso\quasimode\__init__.py", line 62, in <module>
    from enso.quasimode.window import TheQuasimodeWindow
  File "C:\oreyes\apps\enso\enso-comunity\enso\quasimode\window.py", line 65, in <module>
    from enso.quasimode.linewindows import TextWindow
  File "C:\oreyes\apps\enso\enso-comunity\enso\quasimode\linewindows.py", line 44, in <module>
    from enso import cairo
  File "C:\oreyes\apps\enso\enso-comunity\enso\cairo.py", line 3, in <module>
    __cairoImpl = enso.providers.getInterface( "cairo" )
  File "C:\oreyes\apps\enso\enso-comunity\enso\providers.py", line 137, in getInterface
    interface = provider.provideInterface( name )
  File "C:\oreyes\apps\enso\enso-comunity\enso\platform\win32\__init__.py", line 61, in provideInterface
    import enso.platform.win32.cairo
  File "C:\oreyes\apps\enso\enso-comunity\enso\platform\win32\cairo\__init__.py", line 1, in <module>
    from _cairo import *
ImportError: No module named _cairo
0 голосов
/ 21 октября 2008

Возможно, вам нужно установить распространяемые файлы среды выполнения VC ++. Ссылки на них здесь .

...