Wizard In The Market
システムトレードの魔術師

*

Python x64 & MinGW64 環境の構築

公開日: : 最終更新日:2017/03/14 Python , , ,

2016-06-10 11.08.02

流石に詰まりまくったのでまとめることにする。

MSYS2 をインストール

個人的にこれからメインで使いたいと思っているbash ツールのMSYS2。ConEmuと使うと、とっても幸せな気分になれます。

x64版をインストール。

msys2を起動し、pacmanで必要なものをインストール。

以下にPathを通す。

libpython27.a の作成

どうやら、標準のlibpython27.aではうまくコンパイルしてくれないらしい。

先ほどインストールしたmsys2上から、DLLのライブラリの作成を行う。

C:\Windows\System32 にあるpython27.dll を作業用ディレクトリに保存。

bash から 作業用ディレクトリに移動し、以下のコマンドを実行

libmsvcr90.aの作成

標準のままだと、ちゃんとmsvcr90.dllにリンクをうまく張ってくれないので、libmsvcr90.aも自作します。

python27.dllをDependency Walkerを使って分析します。

使用しているmsvcr90.dllのFull Pathを取得。そのディレクトリから、msvcr90.dllを作業ディレクトリに持ってきます。

同様に以下のコマンドを実行。

msvcr90.def ファイルができるので、テキストエディタで開きます。

上3行を見つけてコメントアウト。

libmsvcr90.aファイルを作成。

libpython27.aとlibmsvcr90.aをlibsフォルダに保存

インストールしたPythonのルートフォルダのibsフォルダに作成した2つのファイルを保存します。上書きされるのもあるので、念のためバックアップを取ったほうがいいです。

mingwpyのインストール

このままでは、GCCにmanifestファイルが渡されないため、きちんとmsvcr90.dllへのリンクが渡されません。そのため、invalid access to memory が頻繁に表示され、自前のC拡張ライブラリが使えないことがしばしばです。mingwpyを入れれば、適切にmanifestを適応したpydファイルにしてくれます。

※これ、本当に困りました。Dependency Walker で見ても、明らかにmsvcr90.dllへのリンクがちゃんとできてない。manifestの設定方法を調べていてもなかなか出ない等・・。mingwpyで全て解決。

遭遇するであろうエラーとその解決

これで作業が終わって欲しいところなんですが、標準のPythonのincludeファイルをいくつかいじらないと、ちゃんとコンパイルしてくれません。

undefined reference to __imp_Py_InitModule4'

Pythonのルートフォルダから、include\pyconfig.h を開きます。

141行目にあるこの3行を #ifdef _MSC_VER の上の107行目に移動させます。

multiple definition of atexit’

msvcr90.defファイルのコメントアウトをしっかりしていないと、このエラーが表示されます。

DLL load failed: メモリ ロケーションへのアクセスが無効です。

gccにちゃんとmanifestが渡されていないようです。mingwpyをインストールしてみてください。

以上で終わりです。お疲れ様でした!

参考

MSYS2

MSYS2で快適なターミナル生活 – Qiita
はてブ数
MSYS2で快適なターミナル生活Windowsでコマンドラインの環境を整えるには、MSYS2が優秀だ。デフォルトのターミナルはmintty、シェルはbash、パッケ...

Python x64 MinGW64の設定

にほんブログ村 為替ブログへ 
Fx-Kirin

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年に帰国。零細株式会社経営中。

Adsense

  • このエントリーをはてなブックマークに追加
  • Pocket
  • 64 follow us in feedly

関連記事

Windowsユーザ御用達の uci.edu から直接python wheelをインストールしてくれるライブラリ pipwin

あんまり情報が出てこないのでメモ書き。 https://twitter.com/fx_kirin/status/9

記事を読む

絶対ダメ! マルチスレッドでの共通変数のインクリメント演算

デバッグ中の発見 とあるマルチスレッドプログラムをPythonで書いていた際に遭遇した誤使用です。C/C++等

記事を読む

Python 2, Python 3 で string を bytes に変換する。

共通の処理系にしておきたかったので、メモ書き。 [bm url="https://python-future.or

記事を読む

Python Mock で オリジナルのインスタンメソッドのを呼びたい時

autospec と sideeffect を組み合わせるのが解決策だった。

記事を読む

no image

vim-ipythonをWindows 7 x64で使うとR6034 が出る件

個人的なただの忘備録。 Visual Studioのコマンドプロンプトから実行すること。 http://st

記事を読む

Rust で Python の拡張ライブラリ作成 と numpy との性能比較

この記事は Python Advent Calendar 5日目の記事です。遅れてすみません。 Rust で Py

記事を読む

ipdb だけではなく IPython.embed も使おう

ipdb だと複数行の挿入ができなかったりするが、その問題が解消される。明らかにこちらのほうが使い勝手がいい。行のデ

記事を読む

重回帰分析による米雇用統計の予測モデルを作成してみる

この記事はPython その2 Advent Calendar 2015 の17日目の記事です。 1 はじめに

記事を読む

Python requests に DefaultTimeout を設定する

Pythonコード 参考リンク [bm url="https://stackoverflow.com/quest

記事を読む

vim-slime を使って VIM の内容をコンソールに送信

この記事はVim Advent Calendar 2016の20日目の記事です。 選択行の内容をコンソールに送信

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Adsense

DictCursor に AttrDict を指定する

Python requests に DefaultTimeout を設定する

Pythonコード 参考リンク [bm url="https://stackoverflow

Python Mock で オリジナルのインスタンメソッドのを呼びたい時

autospec と sideeffect を組み合わせるのが解決策だった。

Python 2, Python 3 で string を bytes に変換する。

共通の処理系にしておきたかったので、メモ書き。 [bm url="https://python

ctypes で c_char array を c_char_p に変換する

なかなか情報がなかったのでメモ書き。

→もっと見る

PAGE TOP ↑