2010-11-18 6 views
1

Ich versuche, das Beispiel zu erstellen, die unter PC \ example_ntein Python-Modul auf Windows mit MS-Compiler bauen

example.c und setup.py in ein Verzeichnis C

I kopiert mit der Source-Distribution von Python kommt: \ mymod

Wenn ich laufen C:\Python27\python.exe setup.py install ich den Fehler ....

error: Unable to find vcvarsall.bat

ich habe in distutils einige Graben um und sah, dass es nach der Version 9 von Microsoft Visual Studio würde, aber ich nur habe Version 8. Anscheinend versucht es Version 9 zu bekommen, wegen dem was das Python unter C: \ Python27 kompiliert wurde.

Ich habe setup.py geändert und setzen Sie das folgende ganz oben.

from distutils import msvc9compiler 
msvc9compiler.VERSION = 8.0 

Nachdem Sie das getan ich in der Lage war, zu kompilieren und bekam die folgende ....

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 

Nun, wenn ich C laufen: \ Python27 \ python.exe und versuchen zu import example erhalte ich die folgende ...

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

Habe ich etwas falsch gemacht? Wird VS8 zum Erstellen von Python 2.7-Modulen nicht unterstützt? Was soll ich tun?

Schließlich muss ich Bindungen für einige Windows C-Bibliothek erstellen, so dass ich Python verwenden kann, um einige proprietäre Programm statt C zu erweitern. Ich muss VS8 zum Erstellen der C-Erweiterung verwenden. Also, wo bleibt das?

Beratung bitte.

Danke, ~ Eric

+0

Wenn Sie * müssen * VS8 verwenden und Python 2.7 wollen, bauen Sie Ihre eigene Version mit VS8. Sie sind sich nicht sicher, welche Auswirkungen dies auf andere Erweiterungen von Drittanbietern haben könnte, die Sie verwenden möchten, es sei denn, Sie können sie auch neu erstellen. – martineau

Antwort

1

Allgemeinen Sie sprechen haben die Python-Module mit der gleichen Version von VS zu bauen, wie Python mit gebaut wurde. Sie haben mehrere Möglichkeiten:

  1. Verwenden python2.6, die ich denke, VS8 ist (oder eine noch frühere Version, ich bin sicher, dass es eine Änderung zwischen 2,5 und 2,6 war)
  2. Verwendung VS9. Ich nehme an, Sie können das nicht, weil die proprietäre Bibliothek, die Sie verwenden, mit VS8 erstellt wurde. Das gleiche Problem wie mit Python wirklich passiert.
  3. Erstellen Sie Ihre Bindungen mit ctypes. Dies kann schwer sein und es ist sehr einfach, Ihr Programm zum Absturz zu bringen.
  4. Erstellen Sie Python2.7 aus der Quelle mit VS8. Wenn Sie Python2.6 aus irgendeinem Grund nicht verwenden können, ist dies wahrscheinlich die beste Wahl.

Ich würde Option 1 empfehlen, wenn es funktioniert.

+0

Sie können die kostenlose Version von VS 2008 von Microsoft [hier] (http://www.microsoft.com/downloads/en/details.aspx?FamilyId=F3FBB04E-92C2-4701-B4BA-92E26E408569&displaylang=en) herunterladen. Ich glaube, das ist die gleiche Version, mit der Python 2.7 kompiliert wurde.Nicht sicher, ob es koexistieren könnte mit einer anderen Version auf dem gleichen System obwohl ... – martineau

+0

Danke. Ich werde definitiv # 1 geben. Ich habe bereits # 4 ausprobiert und ich konnte die Beispiel-Pyd-Datei laden, die ich mit Visual Studio erstellt habe. Als ich dem Modul, das eine Bibliotheksroutine aufgerufen hat, eine weitere Funktion hinzufügen wollte, konnte ich das Paket nicht mehr in pyhon importieren und bekam den gleichen Importfehler wie zuvor. –