2010-11-18 2 views
1

Я пытаюсь построить пример, который приходит с распределением источника питона под PC \ example_ntстроит модуль питона на окнах с помощью мс компилятор

я скопировал example.c и setup.py в директории C: \ MyMod

Когда я бегу C:\Python27\python.exe setup.py install я получаю ошибку ....

error: Unable to find vcvarsall.bat

Я сделал некоторые копаться в Distutils и увидел, что это происходит после того, как версия 9 Microsoft Visual Studio, но я только есть версия 8. Видимо, он пытается получить версию 9 из-за того, с чем был скомпилирован python под C: \ Python27.

Я модифицировал setup.py и поставил следующее на самом верху.

from distutils import msvc9compiler 
msvc9compiler.VERSION = 8.0 

После этого я смог скомпилировать и получил следующий ....

C:\mymod>C:\Python27\python.exe setup.py install 
running install 
running build 
running build_ext 
building 'example' extension 
creating build 
creating build\temp.win32-2.7 
creating build\temp.win32-2.7\Release 
C:\Program Files\Microsoft Visual Studio 8\VC\BIN\cl.exe /c /nologo /Ox /MD /W3 
/GS- /DNDEBUG -IC:\Python27\include -IC:\Python27\PC /Tcexample.c /Fobuild\temp. 
win32-2.7\Release\example.obj 
example.c 
creating build\lib.win32-2.7 
C:\Program Files\Microsoft Visual Studio 8\VC\BIN\link.exe /DLL /nologo /INCREME 
NTAL:NO /LIBPATH:C:\Python27\libs /LIBPATH:C:\Python27\PCbuild /EXPORT:initexamp 
le build\temp.win32-2.7\Release\example.obj /OUT:build\lib.win32-2.7\example.pyd 
/IMPLIB:build\temp.win32-2.7\Release\example.lib /MANIFESTFILE:build\temp.win32 
-2.7\Release\example.pyd.manifest 
    Creating library build\temp.win32-2.7\Release\example.lib and object build\te 
mp.win32-2.7\Release\example.exp 
C:\Program Files\Microsoft Visual Studio 8\VC\BIN\mt.exe -nologo -manifest build 
\temp.win32-2.7\Release\example.pyd.manifest -outputresource:build\lib.win32-2.7 
\example.pyd;2 
running install_lib 
copying build\lib.win32-2.7\example.pyd -> C:\Python27\Lib\site-packages 
running install_egg_info 
Removing C:\Python27\Lib\site-packages\example-1.0-py2.7.egg-info 
Writing C:\Python27\Lib\site-packages\example-1.0-py2.7.egg-info 

Теперь, когда я бегу C: \ python27 \ python.exe и попытаться import example я получаю следующее ...

ImportError: DLL load failed: The specified module could not be found. 

Я сделал что-то не так? VS8 не поддерживается для создания модулей Python 2.7? Что мне делать?

В конечном итоге мне нужно создать привязки для некоторой библиотеки Windows C, чтобы я мог использовать Python для расширения некоторой проприетарной программы вместо C. Мне нужно использовать VS8 для создания расширения C. Так где же это меня покидает.

Совет, пожалуйста.

Спасибо, ~ Эрик

+0

Если вы * должны использовать VS8 и хотите использовать Python 2.7, создайте свою собственную версию с помощью VS8. Не знаете, какое влияние это может оказать на любые другие сторонние расширения, которые вы, возможно, захотите использовать, если вы не сможете их перестроить. – martineau

ответ

1

Вообще говоря, Вы должны построить модули питона, используя ту же версию VS, как питон был построен с. У вас есть несколько вариантов:

  1. Использование python2.6, который я думать является VS8 (или даже более ранней версии, я уверен, что произошло изменение в интервале от 2,5 до 2,6)
  2. Использование VS9. Я предполагаю, что вы не можете, потому что собственная библиотека, которую вы используете, была построена с помощью VS8. Та же проблема, что и с python.
  3. Создайте свои привязки, используя ctypes. Это может быть сложно и очень легко свернуть вашу программу.
  4. Построить Python2.7 из источника используя VS8. Если вы почему-то не можете использовать Python2.6, то это, вероятно, лучший выбор.

Я бы рекомендовал вариант 1, если он работает.

+0

Вы можете скачать бесплатную версию VS 2008 от Microsoft [здесь] (http://www.microsoft.com/downloads/en/details.aspx?FamilyId=F3FBB04E-92C2-4701-B4BA-92E26E408569&displaylang=en). Я считаю, что это та же самая версия, которая использовалась для компиляции Python 2.7.Не уверен, может ли он сосуществовать с другой версией в той же системе, хотя ... – martineau

+0

Спасибо. Я определенно дам №1. Я уже пробовал # 4, и я мог загрузить пример pyd-файла, который я создал с помощью Visual Studio. Когда я пошел добавить еще одну функцию в модуль, который вызвал библиотечную процедуру, я стал неспособен импортировать пакет в pyhon и получить ту же ошибку импорта, что и раньше. –

Смежные вопросы