まず Mac を使っているので、brew で作られる環境と pip で作られる環境が変に同居するのが面倒なのだろう。brew で入れた方の python を消すという話もみつかったが、多くのライブラリが依存しているので、それは望ましくない。むしろ、python と pipenv までは brew で入れて、それ以降を pipenv で管理するというのがよさそうだった。参考:Mac OS環境にPython開発環境を構築する私的解(brew+pipenv+pyenv)(2020年11月版) - shine-Notes ←これと一緒
pipenv install pkuseg が RuntimeError: Failed to lock Pipfile.lock! し続けるというので困った。pipenvでLockingが無限に終わらないとき #Python - Qiita に書かれている方法で lock を回避しようとしたが、Pipfile の書き方が悪かったのでエラーになってしまい、Pipfile の書き方を調べているうちに次段落の根本的な解決に至ってしまった。pip install pkuseg するとそれ自体は成功するのだが、スクリプトを実行した時に、ValueError: numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject となってエラーになった。pipenv でインストールした numpy との整合性が取れていなかったのだろうか?Pandas も使っているのでこのまだopenな問題にぶち当たったのかもしれない→NumPy 2.0.0 on Python 3.12 causes binary compatibilty issues with numpy.dtype for pandas 2.1.1 · Issue #26710 · numpy/numpy · GitHub。 問題になってる pkuseg が3.8までは安定的に動くという情報が、中国語のQAサイトに記載されていたり、昔は動いていたスクリプトだったり、そもそも Python 3.12 を使っていることによる問題が大きい気がしたので、Python のバージョンを下げて再挑戦することにした。
というわけで pipenv --rm して、 pipenv --python 3.8 してから各種インストールをpipenv でやればうまく行った。
numpy についても Pipfile.lock を確認すると 1.24.4 になっていたようで 『ValueError: numpy.dtype size changed, may indicate binary incompatibility. ...』のエラー - めも で報告されていた問題も回避されているようだ。
なんかほぼ結果論で、何が問題だったのかがイマイチ不明なのが気になるが、同じ問題にぶち当たる人がいるかもしれないので書いておく。僕は基本的にはなんでも最新のものを使おうとしてしまうのだけど、たまにはこうやって古めの環境を作る必要があるのだなぁという学びがあった。
2025/03/04
また、pipenv で詰まった。tensorflow を m2 mac にインストールするには pipenv install tensorflow の代わりに pipenv install tensorflow-macos でうまく行った。
あと、やっぱ最新の python はダメだったので、 pipenv --rm して、 pipenv --python 3.12 でやってみた。しかし、python-tk で結局詰まってしまった。これは brew install python-tk@3.12 で成功した。
また、ModuleNotFoundError: No module named 'cv2' と言われた時に pipenv install cv2 としても Locking Failed! となる。これは単にモジュール名とパッケージ名が異なるので。
brew install opencvpipenv install opencv-python
【Mac】openCVのインストール #Python3 - Qiita
みたいにすればいい。同様なのは PIL = pipenv install pillow
2025/03/12
またつまった。pipenv は brew のが使われているが、それが conflict を起こす例というのがあって、特定のバージョンの pipenv をつかいたいということが生じた。Pipfile を削除して、
/Users/user/.pyenv/versions/3.8.20/bin/python3 -m pipenv install
のように特定のpythonバイナリのpipenvを使って成功した。これは pipenv までは brew で入れるという Mac OS環境にPython開発環境を構築する私的解(brew+pipenv+pyenv)(2020年11月版) - shine-Notes のやり方と違うやり方のほうがいい可能性を示唆しているが、珍しいパターンな気はする。
というわけでここまで
pyenv でバージョンは管理して
pyenv global 3.8.20 pip install numpy pandas
とかメインどころはそこで共通化しておく。pipenv で
pipenv install --site-packages --python <バージョン名>
をするとそのライブラリを使いまわせて、尚且つ、必要に応じて上書きできる。
そうなると、「何のパッケージ使ったっけ…」問題は発生するので、自分が publish 側に回るプロジェクトでは --site-packages を避けた方がいい。(github からツールとしてダウンロードして使うときなどは積極的に --site-packages すればいい)
- パッケージ名が違うかもしれないので確認してみる
- pythonのバージョンを下げてみる
- mac sillicon 特有の事情というのは多いので、調べてみる(なんでも手元でやらずに、普通のサーバをちゃんと持っておいて、そこで作業するのが良いと思う)
- Pipfile を削除して、やりたいコマンドを実行しながら一つ一つライブラリをインストールしてみる
pipenv install --python 3.8ではなく/Users/user/.pyenv/versions/3.8.20/bin/python3 -m pipenv installだと brew で入れた pipenv との相性問題を解決できるかも