Python x64 & MinGW64 環境の構築
流石に詰まりまくったのでまとめることにする。
目次
MSYS2 をインストール
個人的にこれからメインで使いたいと思っているbash ツールのMSYS2。ConEmuと使うと、とっても幸せな気分になれます。
x64版をインストール。
msys2を起動し、pacmanで必要なものをインストール。
1 2 3 4 5 |
yes | pacman -Sy yes | pacman -Su yes '' | pacman -S mingw-w64-x86_64-toolchain yes | pacman -S vim git openssh unzip rsync winpty yes | pacman -S bash pacman pacman-mirrors msys2-runtime |
以下にPathを通す。
1 |
C:\msys64\mingw64\bin |
libpython27.a の作成
どうやら、標準のlibpython27.aではうまくコンパイルしてくれないらしい。
先ほどインストールしたmsys2上から、DLLのライブラリの作成を行う。
C:\Windows\System32 にあるpython27.dll を作業用ディレクトリに保存。
bash から 作業用ディレクトリに移動し、以下のコマンドを実行
1 2 |
gendef python27.dll dlltool --dllname python27.dll --def python27.def --output-lib libpython27.a |
libmsvcr90.aの作成
標準のままだと、ちゃんとmsvcr90.dllにリンクをうまく張ってくれないので、libmsvcr90.aも自作します。
python27.dllをDependency Walkerを使って分析します。
使用しているmsvcr90.dllのFull Pathを取得。そのディレクトリから、msvcr90.dllを作業ディレクトリに持ってきます。
同様に以下のコマンドを実行。
1 |
gendef msvcr90.dll |
msvcr90.def ファイルができるので、テキストエディタで開きます。
1 2 3 |
;atexit ;_decode_pointer ;_encode_pointer |
上3行を見つけてコメントアウト。
1 |
dlltool --dllname msvcr90.dll --def msvcr90.def --output-lib libmsvcr90.a |
libmsvcr90.aファイルを作成。
libpython27.aとlibmsvcr90.aをlibsフォルダに保存
インストールしたPythonのルートフォルダのibsフォルダに作成した2つのファイルを保存します。上書きされるのもあるので、念のためバックアップを取ったほうがいいです。
mingwpyのインストール
このままでは、GCCにmanifestファイルが渡されないため、きちんとmsvcr90.dllへのリンクが渡されません。そのため、invalid access to memory が頻繁に表示され、自前のC拡張ライブラリが使えないことがしばしばです。mingwpyを入れれば、適切にmanifestを適応したpydファイルにしてくれます。
1 |
pip install -i https://pypi.anaconda.org/carlkl/simple mingwpy |
※これ、本当に困りました。Dependency Walker で見ても、明らかにmsvcr90.dllへのリンクがちゃんとできてない。manifestの設定方法を調べていてもなかなか出ない等・・。mingwpyで全て解決。
遭遇するであろうエラーとその解決
これで作業が終わって欲しいところなんですが、標準のPythonのincludeファイルをいくつかいじらないと、ちゃんとコンパイルしてくれません。
undefined reference to __imp_Py_InitModule4'
Pythonのルートフォルダから、include\pyconfig.h を開きます。
1 2 3 |
#ifdef _WIN64 #define MS_WIN64 #endif |
141行目にあるこの3行を #ifdef _MSC_VER の上の107行目に移動させます。
multiple definition of atexit’
msvcr90.defファイルのコメントアウトをしっかりしていないと、このエラーが表示されます。
DLL load failed: メモリ ロケーションへのアクセスが無効です。
gccにちゃんとmanifestが渡されていないようです。mingwpyをインストールしてみてください。
以上で終わりです。お疲れ様でした!
参考
MSYS2
Python x64 MinGW64の設定



About Fx-Kirin
2009年10月にFXを開始、翌年2010年5月から脱サラをしてFX業界に専念。 2012年10月頃から本格的に勝ち始め、一月で資産を倍にする、2年半月間負けなし等、安定した収支で2013年11月に生涯FX収支が1億を超える。 投資スタイルはシステムトレード。プログラミングの知識がほぼない状態から、独学で自分がしたいと思うことであればほぼ実現することが可能なレベルまで成長。好きな言語はRuby, Python。必要となればC++からVBA、Pascal等なんでも行う。MT4/MT5のプログラミングも得意。 2011年にはFXで稼いだ資金をもとにシンガポールに移住し、留学も兼ねて起業をチャレンジするほど、ビジネスを興すことに熱意がある。国内の業者を主に使い始めたことから、2012年に帰国。零細株式会社経営中。
- Web |
- More Posts (408)
Adsense
関連記事
-
-
PythonでsleepしているThreadを呼び起こすプラクティス
Pythonのsleep中のThreadをWake up PythonのThreadにて、RubyのThr
-
-
Windowsユーザ御用達の uci.edu から直接python wheelをインストールしてくれるライブラリ pipwin
あんまり情報が出てこないのでメモ書き。 https://twitter.com/fx_kirin/status/9
-
-
PythonのThreadを待機させるか、必要の度に作成するのかのベンチマーク比較
QueueとThreadのベンチマーク比較 2つのケースについて比較検証してみました。 実際に処理する内
-
-
Rust で Python の拡張ライブラリ作成 と numpy との性能比較
この記事は Python Advent Calendar 5日目の記事です。遅れてすみません。 Rust で Py
-
-
Quantopian の pyfolio を単利運用に対応させる。
pyfolio は どんなデータを入れても複利運用として計算してしまうので、人によっては望まない検証方法だったりし
-
-
絶対ダメ! マルチスレッドでの共通変数のインクリメント演算
デバッグ中の発見 とあるマルチスレッドプログラムをPythonで書いていた際に遭遇した誤使用です。C/C++等
-
-
Python Mock で オリジナルのインスタンメソッドのを呼びたい時
autospec と sideeffect を組み合わせるのが解決策だった。
-
-
Flast-Sockets + redis-py で簡単 Websocket サーバー実装
参考にしたサイト Using WebSockets on Heroku with Python | Heroku
-
-
numpy の2つ行列で片方にあるものだけを抽出する。
numpy で2つの時間のインデックスをarrayデータとして持っていて、x にはない時間のインデックスがyにはあっ
-
-
stop automatically closeing vim-ipython output with jedi-vim
Even though I commented out the following code in vim_ipytho
Adsense
NEW ENTRY
-
- Fixing kernel error AMD-Vi: Event logged IO_PAGE_FAULT on Ryzen Machine
My pc was periodically shut down on 7:40 am JS
-
- Ubuntu で仮想ディスプレイを使う
雑多な備忘録ですが、せっかくなので残しておきます。 Ubuntu 18.04 の resolv.c
-
- PYPIへの登録を10秒でできるようになる方法
pip 使ってますよね Pythonを使っている人であれば、pip installでライブラリ
-
- The art of debugging with GDB, DDD, and Eclipse の読書メモ
GDBの勉強がしたくて、下の本を原著で読んでみました。10年前の本だけど全然現役でした。
-
- JupyterでボタンからJavascriptを実行して追加のアウトプットをさせない方法
Javascriptを実行するとアウトプットセルの行が増える これがとても面倒だった。上の
Twitter
RSS
カテゴリー
-
人気記事一覧