Distutils build_ext msvc 64 bit

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Zuzu_Typ
User
Beiträge: 12
Registriert: Montag 17. Juli 2017, 22:14

Hallöle.

Ich hab jetzt schon kreuz und quer durchs Internet gesucht und habe es trotzdem nicht hinbekommen..

Also.. ich möchte ein Python Projekt zu einer Erweiterung verpacken (.pyd) und zwar für 32 und 64 bit.
Nur leider bekomme ich distutils nicht dazu, meinen Visual Studio 2017 64 bit Compiler zu verwenden.

Es muss doch irgendeinen Weg geben..
__deets__
User
Beiträge: 14538
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ohne mehr Informationen darüber was du getan hast und was nicht kann man nur sehr generisch sagen: es geht. Denk daran, das du MSVC über Umgebungsvariablen bekannt machen musst. Dafür gibt es vcvars.bat oder so etwas in der Art.
Zuzu_Typ
User
Beiträge: 12
Registriert: Montag 17. Juli 2017, 22:14

Tut mir leid, ich war gestern ein wenig unter Zeitdruck.

Also ich baue mir gerade eine Python Version von GLM (OpenGL Mathematics) und aus Performance Gründen, möchte ich nun Teile zu PYDs verpacken.
Dies funktioniert auch für alle 32 bit Python Versionen von 2.7 über 3.3 bis 3.6.
Leider bei 64 bit aber nur mit Python 2.7 (wegen des Microsoft Visual C++ Compiler for Python).

Aus einem mir unerklärlichen Grund wählen die anderen Versionen immer die 32 bit Variante des Compilers.

Code: Alles auswählen

F:\PyGLM\new>"F:\PyGLM\new\pyvers\WinPython-64bit-3.3.5.9\python-3.3.5.amd64\python.exe" setup.py build_ext
running build_ext
skipping 'glm/detail\_vectorize.c' Cython extension (up-to-date)
building 'glm.detail._vectorize' extension
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -IF:\PyGLM\new\pyvers\WinPython-64bit-3.3.5.9\python-3.3.5.amd64\include -IF:\PyGLM\new\pyvers\WinPython-64bit-3.3.5.9\python-3.3.5.amd64\include /Tcglm/detail\_vectorize.c /Fobuild\temp.win-amd64-3.3\Release\glm/detail\_vectorize.obj
_vectorize.c
f:\pyglm\new\pyvers\winpython-64bit-3.3.5.9\python-3.3.5.amd64\include\pymath.h(22): warning C4273: "round": Inkonsistente DLL-Bindung.
C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\ucrt\corecrt_math.h(532): note: Siehe vorherige Definition von "round"
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:F:\PyGLM\new\pyvers\WinPython-64bit-3.3.5.9\python-3.3.5.amd64\libs /LIBPATH:F:\PyGLM\new\pyvers\WinPython-64bit-3.3.5.9\python-3.3.5.amd64\PCbuild\amd64 /EXPORT:PyInit__vectorize build\temp.win-amd64-3.3\Release\glm/detail\_vectorize.obj /OUT:build\lib.win-amd64-3.3\glm\detail\_vectorize.pyd /IMPLIB:build\temp.win-amd64-3.3\Release\glm/detail\_vectorize.lib /MANIFESTFILE:build\temp.win-amd64-3.3\Release\glm/detail\_vectorize.pyd.manifest
python33.lib(python33.dll) : fatal error LNK1112: Modul-Computertyp "x64" steht in Konflikt mit dem Zielcomputertyp "x86".
error: command '"D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\link.exe"' failed with exit status 1112

F:\PyGLM\new>"F:\PyGLM\new\pyvers\WinPython-64bit-3.4.4.7Zero\python-3.4.4.amd64\python.exe" setup.py build_ext
running build_ext
skipping 'glm/detail\_vectorize.c' Cython extension (up-to-date)
building 'glm.detail._vectorize' extension
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -IF:\PyGLM\new\pyvers\WinPython-64bit-3.4.4.7Zero\python-3.4.4.amd64\include -IF:\PyGLM\new\pyvers\WinPython-64bit-3.4.4.7Zero\python-3.4.4.amd64\include /Tcglm/detail\_vectorize.c /Fobuild\temp.win-amd64-3.4\Release\glm/detail\_vectorize.obj
_vectorize.c
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:F:\PyGLM\new\pyvers\WinPython-64bit-3.4.4.7Zero\python-3.4.4.amd64\libs /LIBPATH:F:\PyGLM\new\pyvers\WinPython-64bit-3.4.4.7Zero\python-3.4.4.amd64\PCbuild\amd64 /EXPORT:PyInit__vectorize build\temp.win-amd64-3.4\Release\glm/detail\_vectorize.obj /OUT:build\lib.win-amd64-3.4\glm\detail\_vectorize.pyd /IMPLIB:build\temp.win-amd64-3.4\Release\glm/detail\_vectorize.lib /MANIFESTFILE:build\temp.win-amd64-3.4\Release\glm/detail\_vectorize.pyd.manifest
python34.lib(python34.dll) : fatal error LNK1112: Modul-Computertyp "x64" steht in Konflikt mit dem Zielcomputertyp "x86".
error: command 'D:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.11.25503\\bin\\HostX86\\x86\\link.exe' failed with exit status 1112

F:\PyGLM\new>"F:\PyGLM\new\pyvers\WinPython-64bit-3.5.4.1Zero\python-3.5.4.amd64\python.exe" setup.py build_ext
running build_ext
skipping 'glm/detail\_vectorize.c' Cython extension (up-to-date)
building 'glm.detail._vectorize' extension
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MT -IF:\PyGLM\new\pyvers\WinPython-64bit-3.5.4.1Zero\python-3.5.4.amd64\include -IF:\PyGLM\new\pyvers\WinPython-64bit-3.5.4.1Zero\python-3.5.4.amd64\include "-ID:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\ATLMFC\include" "-ID:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\winrt" /Tcglm/detail\_vectorize.c /Fobuild\temp.win-amd64-3.5\Release\glm/detail\_vectorize.obj
_vectorize.c
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\link.exe /nologo /INCREMENTAL:NO /LTCG /nodefaultlib:libucrt.lib ucrt.lib /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:F:\PyGLM\new\pyvers\WinPython-64bit-3.5.4.1Zero\python-3.5.4.amd64\libs /LIBPATH:F:\PyGLM\new\pyvers\WinPython-64bit-3.5.4.1Zero\python-3.5.4.amd64\PCbuild\amd64 "/LIBPATH:D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\ATLMFC\lib\x86" "/LIBPATH:D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\lib\x86" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.16299.0\ucrt\x86" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.16299.0\um\x86" /EXPORT:PyInit__vectorize build\temp.win-amd64-3.5\Release\glm/detail\_vectorize.obj /OUT:build\lib.win-amd64-3.5\glm\detail\_vectorize.cp35-win_amd64.pyd /IMPLIB:build\temp.win-amd64-3.5\Release\glm/detail\_vectorize.cp35-win_amd64.lib
python35.lib(python35.dll) : fatal error LNK1112: Modul-Computertyp "x64" steht in Konflikt mit dem Zielcomputertyp "x86".
error: command 'D:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.11.25503\\bin\\HostX86\\x86\\link.exe' failed with exit status 1112

F:\PyGLM\new>python setup.py build_ext
running build_ext
skipping 'glm/detail\_vectorize.c' Cython extension (up-to-date)
building 'glm.detail._vectorize' extension
creating build\temp.win-amd64-3.6
creating build\temp.win-amd64-3.6\Release
creating build\temp.win-amd64-3.6\Release\glm
creating build\temp.win-amd64-3.6\Release\glm\detail
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MT -IC:\Python36\include -IC:\Python36\include "-ID:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\ATLMFC\include" "-ID:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\winrt" /Tcglm/detail\_vectorize.c /Fobuild\temp.win-amd64-3.6\Release\glm/detail\_vectorize.obj
_vectorize.c
creating F:\PyGLM\new\build\lib.win-amd64-3.6
creating F:\PyGLM\new\build\lib.win-amd64-3.6\glm
creating F:\PyGLM\new\build\lib.win-amd64-3.6\glm\detail
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\link.exe /nologo /INCREMENTAL:NO /LTCG /nodefaultlib:libucrt.lib ucrt.lib /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:C:\Python36\libs /LIBPATH:C:\Python36\PCbuild\amd64 "/LIBPATH:D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\ATLMFC\lib\x86" "/LIBPATH:D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\lib\x86" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.16299.0\ucrt\x86" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.16299.0\um\x86" /EXPORT:PyInit__vectorize build\temp.win-amd64-3.6\Release\glm/detail\_vectorize.obj /OUT:build\lib.win-amd64-3.6\glm\detail\_vectorize.cp36-win_amd64.pyd /IMPLIB:build\temp.win-amd64-3.6\Release\glm/detail\_vectorize.cp36-win_amd64.lib
python36.lib(python36.dll) : fatal error LNK1112: Modul-Computertyp "x64" steht in Konflikt mit dem Zielcomputertyp "x86".
error: command 'D:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.11.25503\\bin\\HostX86\\x86\\link.exe' failed with exit status 1112
Dementsprechend beschwert er sich immer:

Code: Alles auswählen

fatal error LNK1112: Modul-Computertyp "x64" steht in Konflikt mit dem Zielcomputertyp "x86"
Ich verstehe auch nicht, warum die Versionen 3.3 und 3.4 versuchen, sich mit MSVC 14.x zu kompilieren, denn eigentlich habe ich dafür das Windows SDK mit MSVC 10.x (so wie es hier stand).

Ich hätte den Code oben gerne übersichtlicher gemacht, aber man kann anscheinend darin keine Einfärbungen vornehmen.
__deets__
User
Beiträge: 14538
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich kann nur vermuten das die automatische Erkennung installierter Compiler verkackt. Versuch das mal zu unterbinden. Zum einen mit der schon erwähnten Umgebung, oder ganz hart indem du den VS17-Pfad mal umbennnst, und schaust was passiert.
Zuzu_Typ
User
Beiträge: 12
Registriert: Montag 17. Juli 2017, 22:14

Ich hab jetzt mal geschaut, woher die Information, wo der Compiler ist überhaupt kommt..
Und habe dann feststellen müssen, dass mit dem Ausführen der Visual Studio Developer Konsole (VsDevCmd.bat) die PATH Umgebungsvariable nur für den x86 Compiler gesetzt wird :K
Naja, dann hab ich mich kurz in die BATCH-Datei eingelesen und dann mit der Hilfe von

Code: Alles auswählen

vsdevcmd.bat -host_arch x64 -arch x64
endlich die 64 bit PYDs kompilieren können.

Vielen Dank für die Hilfe :D
--Zuzu_Typ--
Antworten