pythonモジュールのインストールについて扱うページです.
本記事は一応WindowsOSベースで記述していますが,UNIX系OSでも流れはほとんど同じです.
本記事内で <ほげほげ> と書かれていたら,ケースにより文字列が違ってくることを意味します.
記事の抽象度を上げるために,「おそらく類似ケースすべてに適用できる手続き」のみを記載していますので,細かいケースのエラーに対するリカバーは当記事では行えません.ご容赦ください.
#正直これでどうにかなる
pythonはすでに導入済みであることを想定しています.
コマンドプロンプト立ち上げてこれを打つと,ほぼ確実に成功します.
pip install <module-name>
バージョン互換性ミスったので消したい,という方はこちら
pip uninstall <module-name>
さすがにこれだけだと記事にする価値がまったくないので,
pipだとうまくいかなかったりする場合についての説明を加えます.
私の環境ではC/C++のファイルをpythonのファイルへ変換しているようなモジュール,
具体的にはpyOpenCLやpyCUDAあたりはpipでどうにもなりませんでした.
そこで,「GitHubからフォルダごと持ってきて自分でビルドする」方法を以下に記述します.
自分でビルドする
ここからは「C/C++の関数をpythonで使えるようにする系のモジュール」に絞った記述です.
C/C++のコンパイラが後々必要になるので,Visual C++のランタイムを入れておいてください.
gitも必要です.gitはお好きな方法で入れてください.
(zipもらってきてもいいんですが,どちらにせよ後でシェル叩くことになるので最初からシェルでいいんじゃないかなー,という考えです)
gitを入れたらPowerShellなりgit bashなりでPythonモジュールのあるディレクトリに移動します.
(多分,<YourHomeDir>\AppData\Local\Programs\Python\Python<Version>\Lib\site-packages)
そうしたら,欲しいパッケージ名でググってGitHubページへ移動します.
GitHubページのやや右上あたりに「Clone or Download」という緑のボタンがあるのでそこをクリックします.
アドレスが出ますので,それを控えてから,シェルを次のように叩きます.
git clone --recursive <adress>
--recursiveはサブモジュールがあったら一緒に引っ張ってきてくれるオプションです.
引っ張ってきたら,モジュールのディレクトリが増えているので次のように叩きます.
cd <moduleName>
python configure.py
こうすると,ディレクトリ内にsiteconf.pyというファイルが新しく生成されています.
お持ちのエディタで開いてこんな記述を探してください.
CL_INC_DIR = ['<必要なヘッダのパスをここに']
CL_LIB_DIR = ['<必要なlibのパスをここに']
入れたいモジュールが「もともとC/C++の関数をpythonで使えるようにする系」であるならば書いてあります.
元のC/C++ライブラリをインストールしてきて,".h" ".lib"というファイルを探してきます.
上のCL_INC_DIRにヘッダファイルのパス,下のCL_LIB_DIRにlibのパスを書きます.
そうしたらファイルを保存,シェルを次のように叩きます.
python setup.py build
すると文字列がダーッと出てきます.
ここで,なんだか「プログラムを止めたければCtrl-Cを押してね」的な文言と一緒に
プログラムがカウントダウンを始めた場合,Ctrl-Cを押して中断して,文言を読んでください.
大抵は,「この作業をやってないからビルドはきっと失敗するよ」と言っています.
文章をよく読んで指示に従ってから,上述のコマンドを打ち直してください.
(コマンドが書かれていたらそれを反射で打ち込んでいいと思います)
ビルドが始まると大量にwarningが出てきますが,たいていは無視していいです.
途中でビルドに失敗したら,エラーをよく読んでください.
大抵「ヘッダファイルがない」か「libファイルがない」のどちらかです.
対応するファイルを先ほど指定したパスの下に入れて(本当はよくないけど...)やり直します.
ビルドに成功したら,最後の仕上げです.次のコマンドを打ちます.
python setup.py install
これで,pythonで使えるモジュールが生成されます.
#おわりに
正直なところ,直接ビルドするのはとっても厳しかったです.
何しろ,普通であればpipの一行で済むことに対して
- コンパイラの準備
- 対応ヘッダとライブラリの準備
- コマンドラインの扱い
- (英語)
- (エラー対処力)
あたりが必要になってきます.
本記事は最初に述べた通り,細かいケースの対応力がないため
実際のところはモジュールの導入で困っている方の助けにはならないかと思われます.
ただ,抽象的に「大体こんな流れです」というページが個人的に欲しかったので書きました.
ざっくりとした知識程度に受け取っていただければ幸いです.