異邦人になってみた~~上海生活写真ブログ

中国上海市在住です。もう10年を超えました。休日は星空(天の川)撮影やポートレート撮影等、連休時はカメラを持って中国各地を旅行してます。最近は内モンゴル自治区によく行っています。

 このブログについて(about)
  中国旅行/観光/写真記事一覧(省別)

Pythonのrawpyのインストールでハマる・解決備忘録

Pythonのrawpyモジュール

久しぶりにプログラムの話を書きます。
Windows環境でまれにPythonを使ってます。と言っても文法も何も知らないので、ちょいProを動かしているだけですが。。。プログラム言語自体に触るのは超久しぶりです。
もうPythonってfor文がどこで終わるのかよくわかりませんね。というレベルです。
今回はRAWデータの中身を覗きたいと思い、rawpyというモジュールで色々とできそうと言うことがわかりました。開発止まってるっぽいし使えるかどうかはわかりませんが。。。
ということでそのrawpyをインストールしようとしましたが、色々と手こずったので備忘録で書いておきます。

環境

Windows10
python3.8 and python3.9
pythonのrawpyというモジュールをインストールしようとやってみた所。。

pip install rawpy

f:id:shan1tian2:20201113104301p:plain

エラーになります。python3.8 and python3.9ともに駄目です。まず目についたのは以下

LibRaw git submodule is not cloned yet, will invoke "git submodule update --init" now

サブモジュールがクローンされていないと。。。 gitサブモジュールを アップデート?初期化?
そもそもgit自体インストールしていないんですけど。。きっと。。多分。。。pythonを入れたのがもう随分前で、それからあまり使ってないので記憶が。。。
ちなみにコンソールでgitって入れてもそんなものは無いと言われます。まあパスが通ってないのかインストールされていないのでしょうけど。。
関係あるのか無いのかもわから無いのですが、めんどくさいけどgitをインストールしてみました。そしてパスを通します。(後から考えるとこれは不要)
そしてもう一度実行、エラーの内容は以下になっています。gitのところは同じメッセージです。

FileNotFoundError: [Errno 2] No such file or directory: 'external/LibRaw-cmake/CMakeLists.txt'

たしかに指定ディレクトリにCMakeLists.txtというファイルは有りませんでした。ちなみにこのファイル自体は別の場所にあったのでそれを上のパスの先に置いてみましたが、今度はコンパイラがないと言われます。
コンパイラでVisualstadio入れろとか。。。まさかこのPCでMakeコンパイルしようとしてるのか。。。何だこの仕様。。。。linuxでよくある感じの仕様ですね。
Visualstadioって今ダウンロードできて、個人仕様は無料なんですね。昔はお高いソフトでしたが、もうそういう時代なんですね。

自分的にはコンパイルする気がないのでとりあえずこれはここで手詰まりです。
面倒なのでもうバイナリを探すしか有りませんね。
ということでpython3.8.2の方で

rawpy-0.15.0-cp38-cp38-win_amd64.whl

というバイナリを見つけました。amd64っていうのがちょっと引っかかりますが。。。
python3.9の方はバイナリというかwhlを探しますが、windows版が見つかりません。Linux版はあるようです。
まあ3.8でも良いかと思いこれをインストールしてみます。

.whlのインストールは以下のように書きます。

pip install rawpy-0.15.0-cp38-cp38-win_amd64.whl

これで無事rawpyをインストールすることができました。

実は探している最中にいろいろ試してpipがcp38XXXXとかcp35XXXXとか色々あるのですが、自分のpipが対応していないとこのインストールは失敗するようです。
pipの対応cpを確認する方法はget_supported()で確認すれば良いとのこと。。。どうもバージョンによって場所が違うよう?なので、これがどこにあるのかをインストール先をGrepで探しました。
私の環境ではget_supported()がいつくか見つかりましたが、pipのサポートで、それらしいのがpython\Python38-32\Lib\site-packages\pip\_internal\models\target_python.pyにあるようなのでこれを使ってみました。

>>> from pip._internal.models.target_python import get_supported
>>> print(get_supported())

結果は以下

[
<cp38-cp38-win_amd64 @ 2006999208704>,
<cp38-abi3-win_amd64 @ 2006999208960>,
<cp38-none-win_amd64 @ 2006999209216>,
<cp37-abi3-win_amd64 @ 2006984022208>,
<cp36-abi3-win_amd64 @ 2006999271104>,
<cp35-abi3-win_amd64 @ 2006999271360>,
<cp34-abi3-win_amd64 @ 2006999271616>,
<cp33-abi3-win_amd64 @ 2006999271872>,
<cp32-abi3-win_amd64 @ 2006999272128>,
<py38-none-win_amd64 @ 2006999272384>,
<py3-none-win_amd64 @ 2006999272640>,
<py37-none-win_amd64 @ 2006999272896>,
<py36-none-win_amd64 @ 2006999273152>,
<py35-none-win_amd64 @ 2006999273408>,
<py34-none-win_amd64 @ 2006999290112>,
‥‥‥‥‥‥‥‥‥
‥‥‥‥‥‥‥‥‥
]

結構たくさんありますが、この中にあるものしか対応しないようです。
ダウンロードサイトにはいろんなWHLファイルが置かれているんですが、まあバイナリだからそうでしょうけどちゃんと対応するものを持ってこないと動かないということです。

rawpyの強化機能(enhance)

rawpyの中には不良ピクセルを探して修正する機能があるのですが、これを使うには
import rawpy.enhance

が必要なのですが、これを実行すると以下のワーニングが出る

....\Miniconda3\lib\site-packages\rawpy\enhance.py:19: UserWarning: scikit-image not found, will use OpenCV (error: No module named 'skimage')
warnings.warn('scikit-image not found, will use OpenCV (error: ' + str(e) + ')')

scikit-imageが無いとのこと。。。ワーニングだからほっといても良いのかなと思いますが、メッセ時に「repairing 7743844 bad pixels」とでたので、700万ピクセルも修正したの???
なんか不安なのでインストールしておきます。

pip install scikit-image

をしてみるとなんか色々インストールされていきますwww

Successfully installed PyWavelets-1.1.1 cycler-0.10.0 decorator-4.4.2 imageio-2.9.0 kiwisolver-1.3.1 matplotlib-3.3.3 networkx-2.5 pyparsing-2.4.7 python-dateutil-2.8.1 scikit-image-0.17.2 scipy-1.5.4 tifffile-2020.10.1

どうやら上記のモジュールがインストールされたようです。が結果は同じでした。検証はまだなんですけどね。。。