問題はビルド時に求めるC標準ライブラリの命名規則が変化したのにも関わらず従来の方式で呼び出そうとしている事。Python標準ライブラリのdistutils
の問題個所を修正する。
修正方法
場所: %PYTHON_HOME%\Lib\distutils\cygwinccompiler.py
下記のように書き換える。
python
1def get_msvcr():
2 """Include the appropriate MSVC runtime library if Python was built
3 with MSVC 7.0 or later.
4 """
5 msc_pos = sys.version.find('MSC v.')
6 if msc_pos != -1:
7 msc_ver = sys.version[msc_pos+6:msc_pos+10]
8 if msc_ver == '1300':
9 # MSVC 7.0
10 return ['msvcr70']
11 elif msc_ver == '1310':
12 # MSVC 7.1
13 return ['msvcr71']
14 elif msc_ver == '1400':
15 # VS2005 / MSVC 8.0
16 return ['msvcr80']
17 elif msc_ver == '1500':
18 # VS2008 / MSVC 9.0
19 return ['msvcr90']
20 elif msc_ver == '1600':
21 # VS2010 / MSVC 10.0
22 return ['msvcr100']
23 elif int(msc_ver) >= 1900:
24 # VS2015 / MSVC 14.0
25 # return ['msvcr140']
26 return ['ucrtbase']
27 else:
28 raise ValueError("Unknown MS Compiler version %s " % msc_ver)
**%PYTHON_HOME%**はwhere python
で調べる事ができる。
ソース元はAnaconda3.7のdistutils、オリジナルはもう管理していない。
追記
リンクを見るとvcruntime140
が正しそうに見えるがビルドできず、結局のところucrtbase
が正しいとmingwpyの説明。最近の文系プログラマ向けスクールサイトのSEOが妙に高いせいで正しい情報に行きつきにくい。