yumetodoの旅とプログラミングとかの記録

旅や登山の記録やプログラミング関連の話とかフリーソフト紹介とか

python 3.6.9をもっとガチでWindows10でx64 Release buildした

yumetodo.hateblo.jp

これはちょっと本気度が足りなかった。ほんとにビルドしただけで標準ライブラリ動かんし。インストーラーまで生成してこそやろ!

というか主目的のCodeLLDBの動作には至らなかったというだけなんですけどね、はい。

ビルドの準備

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

.NET 3.5

Windows10では.NET 3.5がデフォルトで無効になっている。

blogs.technet.microsoft.com

に従って有効化する。

Visual Studio

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

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

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

gist.github.com

choclatey

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

chocolatey.org

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

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以降のインストーラーでは入れられないので自分で持ってくる必要がある。Download Htmlhelp.exeをクリック。

docs.microsoft.com

ダウンロードしたら実行してどんどん次に進んでいけば終わる。

Build

Download & 展開

www.python.org

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

追加のファイル配置

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

環境変数の設定

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

rem python2.7もしくは3.4以降の`python.exe`のフルパス。
rem 今回はchocolateyで入れているから`"C:\Python37\python.exe"`
set PYTHON="C:\Python37\python.exe"
rem where sphinx-buildすれば教えてくれるだろう。
set SPHINXBUILD="C:\Python37\Scripts\sphinx-build.exe"
rem 1つ目はhg.exeの場所。where hgすれば教えてくれるだろう
rem もう一つはhhc.exeの場所。デフォルトでは"C:\Program Files (x86)\HTML Help Workshop\hhc.exe"
set PATH="C:\Program Files\Mercurial\hg.exe";"C:\Program Files (x86)\HTML Help Workshop\hhc.exe";%PATH%
ビルド

ビルドにはとても時間がかかる。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インストーラーだ。

これを実行する。

python 3.6.9をWindowsでx64 Release buildした

ちょっとVSCodeのCodeLLDBというRustのデバッグに必要なやつのpythonのパス探索にブチ切れている。

github.com

しかしキレてばっかりでは状況が改善しない。どうあがいてもpython3.6が必要なのだ。

www.python.org

を見る限り、3.6系統の最新のリリースは3.6.9だ。しかしどういうわけかpre-build binaryが配布されいない。

仕方ない、ソースコードからビルドを試みるか。

www.python.org

XZ compressed source tarballを落として展開するとPCbuildというディレクトリがある。この中のreadme.txtにまあ大体書いてあるが、手順を書き残しておく。

まずVisual Studioが必要だ。VS2015が指定されているが、VS2017以降ではVS2015のC++コンパイラも入れられるようになっている。これはすでに入れてあった。結局必要だったかは知らない。

VSの開発者コマンドプロンプトを立ち上げる。先程展開したディレクトリに移動して

build.bat -p x64 -c Release

とするとビルドが始まる。

まあなんかエラーが出ているが、とにかくビルドが一旦完了する。amd64というディレクトリが作られており、その中に成果物が入っている。

しかしpython.exeがない。先のreadmeを読むとどのプロジェクトをビルドするべきかはわかる。

The following sub-projects represent the bare minimum required to build
a functioning CPython interpreter.  If nothing else builds but these,
you'll have a very limited but usable python.exe:
pythoncore
    .dll and .lib
python
    .exe

というわけでpcbuild.slnVisual Studioに読ませて立ち上げる。プロジェクトのアップグレードとか言われるが無視する。

Releasex64にした後ソリューションエクスプローラーからpythonを探して右クリックし、ビルドを押す。

select

完了した。

pythonと格闘したときと違って、いろいろ改善しているらしいし、

ymotongpoo.hatenablog.com

今ならこのときdebug版挫折したけど行けるのかな・・・

yumetodo.hateblo.jp

WindowsのコンソールででまともにUnicodeを扱えるようになったのがいつなのかメモする

毎回windows10 chcp65001 update site:qiita.comとかしてググっているのは生産性がないのでメモ。

以前はchcp 65001とかしてもフォントの問題からまともにUnicodeを扱えているとは言えなかったが、Windows 10 Anniversary Update (バージョン1607, RS1) から任意のTrueTypeフォントが使えるようになったので解決した。

ref

qiita.com

qiita.com