はじまり(ポエム)
私はRustのプログラムを愛用しているVisual Studio Codeで書いていた。
デバッグするかーとどうやってデバッグするか調べた。
Visual Studio CodeでRustのコード補完・タスク・Debug実行
なるほど、CodeLLDBというのがあるらしい。
私は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
希望は打ち砕かれた。
I have found a difference in registry. Python is registered under "HKEY_CURRENT_USER" but not under "HKEY_LOCAL_MACHINE" .
なるほど、レジストリ見てんのか。偽装してみるか。
ところがpython36.dll
が見つからないとのたまってきた。
なんでDLLの場所設定でいじれないの?
私はIssueを投げた。
Why does the python version is locked as 3.6 only for Windows? · Issue #205 · vadimcn/vscode-lldb
しかしそうはいっても始まらぬ。なんとかしてPython3.6を手に入れねばならぬ。
Python Releases for Windows | Python.org
3.6系統の最新リリースは・・・3.6.9か。リンクを踏んだ私に待ち受けていたのは・・・
Python Release Python 3.6.9 | Python.org
ソースコードしか配布されていないという現実だった
・・・これはビルドするしかない! 一つ前の3.6.8を使うという発想が何故かなかった私はビルドする道へ進んだ。最近はC++書いてなくてTypeScriptばっか書いてるけどVisual Studioくらい入ってるし余裕でしょ、そう思っていた。
開発者コマンドプロンプトで配布されているソースコードを展開したディレクトリの中のPCbuild
に移動して
build.bat -p x64 -c Release
とし、ビルドした。なんかエラーが出たり型変換周りの(int
をvoid*
にキャストして配列に格納しまたint
にキャストして使うとかいうコードが原因、これ書いたやつ正気か?これだからC言語使い共は・・・)警告がどっさり出たが、とにかく終わった。
レジストリを偽装し、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
に従って有効化する。
Visual Studio
2015以上であればよい。私はVisual Studio 2019を選んだ。C#とC++のコンパイルが普通にできれば十分だとは思うが、なんせ私の環境にはいろいろ入れているので最小構成がよくわからない。
MSVC v140 - VS2015 C++ ビルドツール
とかも必要である可能性はある。
まあなんなら下にVS installerの構成ファイル置いておくので適宜いじって読み込ませてほしい。
https://gist.github.com/yumetodo/c48152a7512356db33bb2c0994610359
choclatey
必須というわけではないが、ないと説明が面倒くさいので。
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/
からtcl-core8.6.6-src.tar.gz
をダウンロードする。
HTML Help Workshop
Visual Studio 2017以降のインストーラーでは入れられないので自分で持ってくる必要がある。
Microsoft HTML Help Downloads | Microsoft Docs
Download Htmlhelp.exe
をクリック。ダウンロードしたら実行してどんどん次に進んでいけば終わる。
Build
Download & 展開
Python Release Python 3.6.9 | Python.org
XZ compressed source tarballを落として展開する。
追加のファイル配置
その中にexternals
というディレクトリを作る。そこにtcl-core8.6.6-src.tar.gz
を展開する。フォルダー名はtcl-core-8.6.6.0
に。これをやらないと、下のようなエラーに見舞われる。
環境変数の設定
VSの開発者コマンドプロンプトを立ち上げる。以下の環境変数を設定する。
set PYTHON="C:\Python37\python.exe"
python2.7もしくは3.4以降のpython.exe
のフルパス。
今回はchocolateyで入れているから"C:\Python37\python.exe"
set SPHINXBUILD="C:\Python37\Scripts\sphinx-build.exe"
where sphinx-build
すれば教えてくれるだろう。
set PATH="C:\Program Files\Mercurial\hg.exe";"C:\Program Files (x86)\HTML Help Workshop\hhc.exe";%PATH%
1つ目はhg.exeの場所。where hg
すれば教えてくれるだろう
もう一つはhhc.exeの場所。デフォルトでは"C:\Program Files (x86)\HTML Help Workshop\hhc.exe"
ビルド
ビルドにはとても時間がかかる。PCを放置して別の作業をしたいが、PGOビルドをするときにネットワーク接続をしようとしてWindowsのファイアウォールから許諾画面が出てくる。ただまあビルドの最終盤で気がついて許可したけど多分間に合ってなかったろうし、やっぱり放置してもいい気がする。
ビルドコマンドは極めてシンプルだ。-o
にはビルド成果物を置く場所を指定する。
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の設定を
"lldb.launch.env": {
"PATH": "C:\\Python36",
"PYTHONPATH": "C:\\Python36\\Lib",
}
見直してリベンジだ。
動いた。
余談
大体同じ話が
- python 3.6.9をWindowsでx64 Release buildした - yumetodoの旅とプログラミングとかの記録
- python 3.6.9をもっとガチでWindows10でx64 Release buildした - yumetodoの旅とプログラミングとかの記録
に書いてあるのですが、せっかくなのでQiitaにもあげようとこの記事を書いたわけです。
追記
https://github.com/vadimcn/vscode-lldb/issues/205#issuecomment-557977394
vadimcn commented on 25 Nov 2019As of v1.4.0, codelldb will use whatever Python 3 (>=3.3) you've got.
Python3系なら動くってことになったぽい。やったぜ。