2017-02-16 4 views
0

Ich habe kürzlich von Winpython Version 3.5 auf die entsprechende Version mit Python 3.6 aktualisiert. Daher muss ich meine C-Erweiterungen mit dem neuen Interpreter neu kompilieren. Mein Setup-Skript sieht wie folgt aus:Distutils rufen "link.exe" nicht auf, wenn Sie WinPython 3.6 verwenden, aber mit WinPython 3.5 funktioniert es

from distutils.core import setup, Extension 
import numpy.distutils.misc_util 

c_ext = Extension("heapoperations", ["heapoperations.c"]) 

setup(
    ext_modules=[c_ext], 
    include_dirs=numpy.distutils.misc_util.get_numpy_include_dirs(), 
) 

Die Konsole ausgegeben, wenn Python mit 3,5

running build_ext 
No module named 'numpy.distutils._msvccompiler' in numpy.distutils; trying from distutils 
building 'heapoperations' extension 
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\amd64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -I"C:\Program Files\WinPython-64bit-3.5.1.2\python-3.5.1.amd64\lib\site-packages\numpy\core\include" -I"C:\Program Files\WinPython-64bit-3.5.1.2\python-3.5.1.amd64\include" -I"C:\Program Files\WinPython-64bit-3.5.1.2\python-3.5.1.amd64\include" -I"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\shared" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\um" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\winrt" /Tcheapoperations.c /Fobuild\temp.win-amd64-3.5\Release\heapoperations.obj 
Found executable C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\amd64\cl.exe 
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\amd64\link.exe /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:"C:\Program Files\WinPython-64bit-3.5.1.2\python-3.5.1.amd64\libs" /LIBPATH:"C:\Program Files\WinPython-64bit-3.5.1.2\python-3.5.1.amd64\PCbuild\amd64" /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB\amd64" /LIBPATH:"C:\Program Files (x86)\Windows Kits\10\lib\10.0.10240.0\ucrt\x64" /LIBPATH:"C:\Program Files (x86)\Windows Kits\10\lib\10.0.10240.0\um\x64" /EXPORT:PyInit_heapoperations build\temp.win-amd64-3.5\Release\heapoperations.obj /OUT:D:\MyProject\heapoperations.cp35-win_amd64.pyd /IMPLIB:build\temp.win-amd64-3.5\Release\heapoperations.cp35-win_amd64.lib 
Found executable C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\amd64\link.exe 

jedoch war, als ich das gleiche Skript mit Python laufen 3.6 ich

running build_ext 
No module named 'numpy.distutils._msvccompiler' in numpy.distutils; trying from distutils 
building 'heapoperations' extension 
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -I"C:\Program Files\WinPython-64bit-3.6.0.1Qt5\python-3.6.0.amd64\lib\site-packages\numpy\core\include" -I"C:\Program Files\WinPython-64bit-3.6.0.1Qt5\python-3.6.0.amd64\include" -I"C:\Program Files\WinPython-64bit-3.6.0.1Qt5\python-3.6.0.amd64\include" -I"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\shared" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\um" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\winrt" /Tcheapoperations.c /Fobuild\temp.win-amd64-3.6\Release\heapoperations.obj 
Found executable C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe 

That ist, link.exe wird nicht aufgerufen. Das Ergebnis ist, dass ich keine Datei bekomme, die es mir erlaubt, den Code zu verwenden.

Was könnte das Verhalten erklären? Wie kann ich alles unter WinPython 3.6 arbeiten lassen?

Ich verwende 64bit WinPython unter Windows 10 64bit.

+0

wahrscheinlich nicht die Antwort, aber re- versuche es nachdem ich python._pth umbenannt habe, eine Datei neben python.exe, wie python_nomore._pth – stonebig

+0

@stonebig das habe ich schon gemacht. Es hat keine Auswirkungen auf das Problem. Ich bin mir Ihrer Antwort auf meine vorherige Ausgabe bewusst http://stackoverflow.com/questions/42263962/modulenotfounderror-python-3-6-does-not-find-modules-while-python-3-5-does/42266369? noredirect = 1 # comment71720852_42266369 – Samufi

+0

ok, eine andere dumme Idee ist, dass es einen Grenzeffekt mit zuvor mit Python-3.5-Objekten kompiliert ... vielleicht versuchen, Namen Ihrer Dateien zu ändern, um sicher zu sein, keine "früheren" Objekte auf Ihrem System zu haben ? – stonebig

Antwort

0

Ich habe einen Versuch von http://dan.iel.fm/posts/python-c-extensions/ (und _chi2.c von https://gist.github.com/douglas-larocca/099bf7460d853abb7c17)

Ergebnis:

C:\WinPython\basedir36\buildQt5\winpython-64bit-3.6.x.2\notebooks>python setup.py build_ext --inplace 
running build_ext 
No module named 'numpy.distutils._msvccompiler' in numpy.distutils; trying from distutils 
building '_chi2' extension 
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -IC:\WinPython\basedir36\buildQt5\winpython-64bit-3.6.x.2\python-3.6.0.amd64\lib\site-packages\numpy\core\include -IC:\WinPython\basedir36\buildQt5\winpython-64bit-3.6.x.2\python-3.6.0.amd64\include -IC:\WinPython\basedir36\buildQt5\winpython-64bit-3.6.x.2\python-3.6.0.amd64\include -I"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -I"C:\Program Files (x86)\Windows Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" /Tc_chi2.c /Fobuild\temp.win-amd64-3.6\Release\_chi2.obj 
Found executable C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe 
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -IC:\WinPython\basedir36\buildQt5\winpython-64bit-3.6.x.2\python-3.6.0.amd64\lib\site-packages\numpy\core\include -IC:\WinPython\basedir36\buildQt5\winpython-64bit-3.6.x.2\python-3.6.0.amd64\include -IC:\WinPython\basedir36\buildQt5\winpython-64bit-3.6.x.2\python-3.6.0.amd64\include -I"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -I"C:\Program Files (x86)\Windows Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" /Tcchi2.c /Fobuild\temp.win-amd64-3.6\Release\chi2.obj 
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\link.exe /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:C:\WinPython\basedir36\buildQt5\winpython-64bit-3.6.x.2\python-3.6.0.amd64\libs /LIBPATH:C:\WinPython\basedir36\buildQt5\winpython-64bit-3.6.x.2\python-3.6.0.amd64\PCbuild\amd64 /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB\amd64" /LIBPATH:"C:\Program Files (x86)\Windows Kits\10\lib\10.0.10240.0\ucrt\x64" /LIBPATH:"C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x64" /EXPORT:PyInit__chi2 build\temp.win-amd64-3.6\Release\_chi2.obj build\temp.win-amd64-3.6\Release\chi2.obj /OUT:C:\WinPython\basedir36\buildQt5\winpython-64bit-3.6.x.2\notebooks\_chi2.cp36-win_amd64.pyd /IMPLIB:build\temp.win-amd64-3.6\Release\_chi2.cp36-win_amd64.lib 
Found executable C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\link.exe 

C:\WinPython\basedir36\buildQt5\winpython-64bit-3.6.x.2\notebooks> 

Test Ergebnis:

PS C:\WinPython\basedir36\buildQt5\winpython-64bit-3.6.x.2\notebooks> python 
Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import _chi2; print (_chi2.chi2(2.0, 1.0, [-1.0, 4.2, 30.6], [-1.5, 8.0, 63.0], [1.0, 1.5, 0.6])) 
2.8988888888888766 
Verwandte Themen