memoryfolder

メモです

windows10、ipython notebook上でpyximportするとコンパイルエラー

結構はまったのでメモ。

 

まずはpyximportを使ってみた。

ImportError: Building module cythontest1 failed: ["CompileError: command 'gcc' failed: No such file or directory\n"]


 gccが見つからないらしい。

visual studio入ってるはずなんだけど…

 

1.使うVisual studioを変更

なぜかC:\Program Files (x86)\Microsoft Visual Studio 9.0

に\VCがなくて、pythonが見に行ってるのもそこみたいだったので

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC

をみにいってくれるようにする。

Pythonモジュールのインストール:脈絡もとりとめもない独り言:So-netブログ

  SET VS90COMNTOOLS=%VS140COMNTOOLS%

ipython notebookでははじめに!をつける

 

2.pyximportのコンパイラ指定

mingw - Cython pyximport error on Windows - Stack Overflow

mingw_setup_args={'options': {'build_ext': {'compiler': 'mingw32'}}}
import pyximport; pyximport.install(setup_args=mingw_setup_args)

 

3.pythonのdistutilデフォルトを設定

C:\Python27\Lib\distutils

にdistutils.cfgを作って

[build]
compiler=mingw32
[build_ext]
compiler = mingw32

とかく。

 

3.setup.pyにnumpyのヘッダの位置を教える(意味あったのか?)

Cython+Numpyメモ - 星を求める蛾の願い

CythonでCのモジュールにnumpyオブジェクトを渡す - たまに書きます

python - Make distutils look for numpy header files in the correct place - Stack Overflow

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import numpy
setup(
    cmdclass = {'build_ext': build_ext},
    ext_modules = [Extension("cythontest1", ["cythontest1.pyx"],
        include_dirs=[numpy.get_include()]
        )]
)

 

4.gccpython用に

python - Error: command 'gcc' failed: No such file or directory - Stack Overflow

msvcr**.dllのどれをdefault runtimeにするか聞かれたんで、

  • msvcr140.dll (Visual C++ 2015の場合)
  • msvcr120.dll (Visual C++ 2013の場合)
  • msvcr110.dll (Visual C++ 2012の場合)
  • msvcr100.dll (Visual C++ 2010の場合)
  • msvcr90.dll (Visual C++ 2008の場合)

でえらぶ。no python found in the registried らしい。バージョン合わないとのこと

 

4.cython magic使う

せっかくipython使ってるんでcython magicのほうが楽でしょうと思ったけどだめ。
ImportError: Building module cythontest1 failed: ["CompileError: command 'gcc' failed: No such file or directory\n"]

 

5.mingwダウンロード

入ってなかったぽい。入れるとcython magicは使えるようになった。

mingwのサイトでダウンロードして、

f:id:sunakku:20161113230751p:plain

このあたりを選んでインストール。

pathを通して、

C:\MinGW\bin
C:\MinGW\MSYS\1.0\local\bin
C:\MinGW\MSYS\1.0\bin

 

結局やったのはこれで質問者がやったと書いてる一通りのやつでした

python - Cannot get Cython to find the MinGW gcc compiler even after editing PATH, making a file in distutils, removing all instances of -mno-cygwin - Stack Overflow