俺はRustのDebugをしようとしていた。そうしたらpython 3.6.9をWindows10でx64 Release buildしていた

# はじまり(ポエム)

私はRustのプログラムを愛用しているVisual Studio Codeで書いていた。


デバッグするかーとどうやってデバッグするか調べた。

[Visual Studio CodeでRustのコード補完・タスク・Debug実行](https://qiita.com/kat_out/items/cf89a8dffb4e0629948a)

なるほど、[CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb)というのがあるらしい。

私はCodeLLDBをポチッと導入し、設定を書き起動しようとした。

> CodeLLDB requires Python 3.6(64bit), but looks like it is not installed on this machine

Python必要なの！？あれ、でもPython入れてなかったっけ・・・

```
python -V
Python 3.2.2
```

古すぎ！

はいはい、chocolateyで入れましょうね～

```
choco install python3 -y
```

```
python -V
Python 3.7.4
```

あれ、なんか3.7が降ってきた。まあ3.6って言ってたけど動くでしょ！

> CodeLLDB requires Python 3.6(64bit), but looks like it is not installed on this machine

希望は打ち砕かれた。

> [got error : CodeLLDB requires Python 3.6(64bit), but looks like it is not installed on this machine · Issue #157 · vadimcn/vscode-lldb](https://github.com/vadimcn/vscode-lldb/issues/157)
>
>I got the same error,
>![image](https://user-images.githubusercontent.com/46454174/50803179-b1352c80-130f-11e9-957a-f832b4708b2f.png)
>
>I have found a difference in registry. Python is registered under "HKEY_CURRENT_USER" but not under "HKEY_LOCAL_MACHINE" .

なるほど、レジストリ見てんのか。偽装してみるか。

ところが`python36.dll`が見つからないとのたまってきた。

![dll](https://file.qiitadon.com/media_attachments/files/001/425/186/original/a21f8b89d26eabad.png)

なんでDLLの場所設定でいじれないの？
私はIssueを投げた。
[Why does the python version is locked as 3.6 only for Windows? · Issue #205 · vadimcn/vscode-lldb](https://github.com/vadimcn/vscode-lldb/issues/205)

しかしそうはいっても始まらぬ。なんとかしてPython3.6を手に入れねばならぬ。

[Python Releases for Windows | Python.org](https://www.python.org/downloads/windows/)

3.6系統の最新リリースは・・・3.6.9か。リンクを踏んだ私に待ち受けていたのは・・・

[Python Release Python 3.6.9 | Python.org](https://www.python.org/downloads/release/python-369/)

**ソースコードしか配布されていないという現実だった**

・・・**これはビルドするしかない！** 一つ前の3.6.8を使うという発想が何故かなかった私はビルドする道へ進んだ。最近はC++書いてなくてTypeScriptばっか書いてるけどVisual Studioくらい入ってるし余裕でしょ、そう思っていた。

開発者コマンドプロンプトで配布されているソースコードを展開したディレクトリの中の`PCbuild`に移動して

```
build.bat -p x64 -c Release
```

とし、ビルドした。[なんかエラーが出たり型変換周りの(`int`を`void*`にキャストして配列に格納しまた`int`にキャストして使うとかいうコードが原因、これ書いたやつ正気か？これだからC言語使い共は・・・)警告がどっさり出た](https://qiitadon.com/web/statuses/102683814399014503)が、とにかく終わった。

レジストリを偽装し、VSCodeの設定で"lldb.launch.env"の`PATH`を書いて動かした。

```
Fatal Python error: Py_Initialize: unable to load the file system codec
Import Error: No module named 'encodings' 
```

**これなにか足りてないやつだ**、そう悟った私はとりあえず眠り、リフレッシュした脳みそで本気で取り組むことにした。

# 本気でビルドする

## ビルドの準備

改めてビルドの準備をしていく。

### .NET 3.5

Windows10では.NET 3.5がデフォルトで無効になっている。
[.NET Framework 3.5 を有効化する手順について ( Windows 10 ) | Ask CORE](https://blogs.technet.microsoft.com/askcorejp/2018/10/05/enable_net35_win10/)
に従って有効化する。

### Visual Studio

2015以上であればよい。私はVisual Studio 2019を選んだ。C#とC++のコンパイルが普通にできれば十分だとは思うが、なんせ私の環境にはいろいろ入れているので最小構成がよくわからない。

`MSVC v140 - VS2015 C++ ビルドツール`とかも必要である可能性はある。

まあなんなら下にVS installerの構成ファイル置いておくので適宜いじって読み込ませてほしい。

[https://gist.github.com/yumetodo/c48152a7512356db33bb2c0994610359](https://gist.github.com/yumetodo/c48152a7512356db33bb2c0994610359)

### choclatey

必須というわけではないが、ないと説明が面倒くさいので。

[https://chocolatey.org/install](https://chocolatey.org/install)

にあるとおりに入れてほしい。

### Mercurial

管理者権限のあるPowershellないしコマンドプロンプトで

```
choco install hg -y
```

### Python

PythonをビルドするにはPythonが必要である。おおっと、鶏と卵の問題というかブートストラップ問題だ。

```
choco install python3 -y
```

#### sphinx

さっそくPythonについてくるpipの出番だ。

```
pip install Sphinx
```

### Tcl

これがなんなのかわかっていないがとにかく必要らしい。なんとなくIDLEのためじゃないかという気がするが・・・。

[ftp://ftp.tcl.tk/pub/tcl/tcl8_6/](ftp://ftp.tcl.tk/pub/tcl/tcl8_6/)

から`tcl-core8.6.6-src.tar.gz`をダウンロードする。

### HTML Help Workshop

Visual Studio 2017以降のインストーラーでは入れられないので自分で持ってくる必要がある。
[Microsoft HTML Help Downloads | Microsoft Docs](https://docs.microsoft.com/ja-jp/previous-versions/windows/desktop/htmlhelp/microsoft-html-help-downloads)
`Download Htmlhelp.exe`をクリック。ダウンロードしたら実行してどんどん次に進んでいけば終わる。

## Build

### Download & 展開

[Python Release Python 3.6.9 | Python.org](https://www.python.org/downloads/release/python-369/)

XZ compressed source tarballを落として展開する。

### 追加のファイル配置

その中に`externals`というディレクトリを作る。そこに`tcl-core8.6.6-src.tar.gz`を展開する。フォルダー名は`tcl-core-8.6.6.0`に。これをやらないと、下のようなエラーに見舞われる。

![error](https://file.qiitadon.com/media_attachments/files/001/425/010/original/7dff6df9d53fe486.png)

### 環境変数の設定

VSの開発者コマンドプロンプトを立ち上げる。以下の環境変数を設定する。

```powershell
set PYTHON="C:\Python37\python.exe"
```

python2.7もしくは3.4以降の`python.exe`のフルパス。
今回はchocolateyで入れているから`"C:\Python37\python.exe"`

```powershell
set SPHINXBUILD="C:\Python37\Scripts\sphinx-build.exe"
```

`where sphinx-build`すれば教えてくれるだろう。

```powershell
set PATH="C:\Program Files\Mercurial\hg.exe";"C:\Program Files (x86)\HTML Help Workshop\hhc.exe";%PATH%
```

１つ目はhg.exeの場所。`where hg`すれば教えてくれるだろう
もう一つはhhc.exeの場所。デフォルトでは`"C:\Program Files (x86)\HTML Help Workshop\hhc.exe"`

### ビルド

ビルドにはとても時間がかかる。PCを放置して別の作業をしたいが、PGOビルドをするときにネットワーク接続をしようとしてWindowsのファイアウォールから許諾画面が出てくる。ただまあビルドの最終盤で気がついて許可したけど多分間に合ってなかったろうし、やっぱり放置してもいい気がする。

ビルドコマンドは極めてシンプルだ。`-o`にはビルド成果物を置く場所を指定する。

```powershell
cd Tools\msi
buildrelease.bat -x64 -o "C:\tmp\python"
```

最終的に

```
               Total    Copied   Skipped  Mismatch    FAILED    Extras
    Dirs :         1         0         1         0         0         0
   Files :        71        28        43         0         0         0
   Bytes :   96.69 m   49.61 m   47.08 m         0         0         0
   Times :   0:00:00   0:00:00                       0:00:00   0:00:00


   Speed :           481735111 Bytes/sec.
   Speed :           27565.104 MegaBytes/min.
   Ended : 2019年8月27日 17:26:31
```

のようなログが出て終わった。

## install

先程`-o`で指定したディレクトリに`amd64`というディレクトリが作られているはずだ。`python-3.6.9-amd64.exe`がよくお見かけするpythonのインストーラーだ。

これを実行する。

# CodeLLDBよ、動け

VSCodeの設定を

```json
"lldb.launch.env": {
  "PATH": "C:\\Python36",
  "PYTHONPATH": "C:\\Python36\\Lib",
}
```

見直してリベンジだ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94177/bceba0e6-1103-261c-7932-a88bc462ef39.png)

動いた。

# 余談

大体同じ話が

- [python 3.6.9をWindowsでx64 Release buildした - yumetodoの旅とプログラミングとかの記録](https://yumetodo.hateblo.jp/entry/2019/08/27/003655)
- [python 3.6.9をもっとガチでWindows10でx64 Release buildした - yumetodoの旅とプログラミングとかの記録](https://yumetodo.hateblo.jp/entry/2019/08/27/183346)

に書いてあるのですが、せっかくなのでQiitaにもあげようとこの記事を書いたわけです。

# 追記

> https://github.com/vadimcn/vscode-lldb/issues/205#issuecomment-557977394
> vadimcn commented on 25 Nov 2019
>
> As of v1.4.0, codelldb will use whatever Python 3 (>=3.3) you've got.

Python3系なら動くってことになったぽい。やったぜ。