概要
5年使用したMacBook Airを手放し、MacBook Proに移行しました。Python環境と諸々のモジュールを整備した時の作業ログです。
非情報系ということもあり環境構築にあまり詳しくなく体当たりで色々試したので、結構蛇足な作業、トライアンドエラーが多いかと思いますが、皆さんが環境構築でつまづいたた時のヒントになると思い、記録を残します。
Macのスペックなど
旧PC
- 機種:MacBook Air 2018
- 容量:256GB
- メモリ:8GB
- プロセッサ:1.6GHzデュアルコアIntel Core i5
新PC
- 機種:MacBook Pro 2023
- 容量:512GB
- メモリ:16GB
- プロセッサ:Apple Silicon M3
プロセッサが違うためこちらの2機種は、Python環境の互換性が無いようです。そのため、移行アシスタントを使って必要なデータを全て新PCに転送した後、Pythonをアンインストールして環境を再構築しました。
公式サイトからのダウンロード
公式サイトからPythonをダウンロードしました。公式サイト経由でダウンロードするとIDLEとPythonラウンチャーも併せてダウンロードできるので、ターミナルよりも便利な編集・実行環境がゲットできます。
HomeBrewのインストール
旧PCでPythonの環境構築をしたときもHomebrewを使ったので、今回も同様に使っていきます。ターミナルでこちらのコマンドを実行しました。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
pyenvのインストール
Pythonのバージョン管理に使うpyenvをインストールしました。(初知り)
brewを使ってインストールしました。
brew install pyenv
Pythonのシステムの向き先がPythonのままなので、以下のコマンドでPATHを通します。
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
所望のPythonのインストール
欲しいバージョンのPythonをpyenvでインストールします。
pyenv経由でpythonをインストールする場合、xzを先にインストールしておきます。
brew install xz
次のコードで最新のpythonのバージョンを確認して
pyenv install --list
出力された型番から欲しいバージョンのpythonをダウンロードします
pyenv install 3.x.x
pythonのバージョンをインストールしたものにするにはglobalを用います。
pyenv global 3.x.x
どのバージョンのpythonがインストールできたかは以下のコマンドで確認できます。
python -V
poetryのインストール
あまり環境依存するような複雑なコードを書いたことがないので今後使うかどうかわからないのですが、パッケージ管理用のツールであるpoetryを導入しておきました。PATHを通すコマンドを打ち込みます。
curl -sSL https://install.python-poetry.org | python3 -
.bash_profileの編集
.bash_profileに記述してある、旧PCの設定を書き換えます。
まずviコマンドで.bash_profileの中に入ります。
vim ~/.bash_profile
前のパスが書かれているので、以下の通り修正。
# bashrc有効化
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
eval "$(/opt/homebrew/bin/brew shellenv)"
# pyenv
export PYENV_ROOT="$HOME/.pyenv"
##export PATH="$PYENV_ROOT/bin:$PATH" (このパスから下のパスへ変わったようです)
export PATH="$PYENV_ROOT/shims:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
export LDFLAGS="-L/opt/homebrew/opt/zlib/lib"
export CPPFLAGS="-I/opt/homebrew/opt/zlib/include"
export PKG_CONFIG_PATH="/opt/homebrew/opt/zlib/lib/pkgconfig"
## ↓Intel Mac時代に設定したこの環境変数が悪さをしていたと思われます。
## postgresql
##export ARCHFLAGS="-arch x86_64"
###export PGDATA="/usr/local/var/postgres"
viの編集についてはこちらの記事が参考になります。
必要なモジュールのインストール
これでひとまずPython自体は動くようになったのですが、numpyなどのモジュールをコードでimportしようとすると次のようなエラーを吐きました。
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "【ファイルのディレクトリ】", 1
ine 1, in ‹module>
import mayavi.mlab as mlab
File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-p
ackages/mayavi/mlab-py", line 15, in ‹module>
from mayavi.core.common import process_ui_events
File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-p
ackages/mayavi/core/common.py", line 16, in <module>
from apptools-persistence.state_pickler import create_instance
File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-p ackages/apptools/persistence/state_pickler.py", line 116, in ‹module >
import numpy
File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-p
ackages/numpy/__init_
_py", line 135, in ‹module >
raise ImportError(msg) from e
ImportError: Error importing numpy: you should not try to import numpy from
its source directory; please exit the numpy source tree, and relaunch your python interpreter from
移行したときに、前のCPU用の実行ファイルが色々混ざったことが原因として考えられるようです。今の環境下でモジュールをimportできるよう、以下のコマンドで強制的にpip installを実行しました。
pip install --upgrade --force-reinstall <package>
No module namedとなっているモジュールのパスを通す
コードを実行しようとした時、次のようなエラーが出力されました。
No module named mayavi
PythonのPATHに何かしらの問題があり、モジュール(今回の例だとmayavi)を認識してくれなかったようです。
そこでまずpipでモジュール情報を確認します。
pip show <module>
するとモジュールの情報が出力されます。Locationの行にディレクトリパスが出力されると思うので、そちらを使います。
上記の時点で、モジュールが存在していなければpipでインストールします。
pip install <module>
次のコードをコードに追記することでパスを設定でき、モジュールを動かすことができました。
import sys
# passの設定 (pip showで出てきた、LocationのPASSを以下に設定)
sys.path.append('/opt/anaconda3/envs/xxxxxxxx/lib/pythonX.X/site-packages')
# passの設定はimportするモジュールより前に設定
import xxxxxx
VSCodeにて必要なモジュールの再インストール
VSCodeのjupyter notebookを使ってコーディングすることが多いので、必要なモジュールを再インストールしました。
pip install numpy
など基本的にはpipでインストールできました
振り返って
旧PCにPythonの環境を我流で構築をした時代は、プログラミングなんて全然分からないひよっこ状態だったので、インストールの手法や環境がかなりごちゃごちゃでした。問題が起きている箇所に自覚がないまま、エラーに悪戦苦闘。友人を頼りながら5時間ほどかけてPythonの環境構築が完了しました。(研究でPythonを使っているので、動かなかった時は終始冷や汗をかいていましたね)
ひとまず動く状態にはなりましたが、エラーに対しては場当たり的な対処で根本的な解決には至りませんでした。よってこのカオス環境は旧PCから引き継がれることとなりました。旧PCのリセット・下取りの準備は完了したのですが、新PCでPythonの不具合が見つからないことを祈ります。。。
参考URL
- ゼロからM2 MacにPython環境構築
- M1 Mac に Python をインストールしたい
-
Mac OSでPython環境を構築する作業メモ
- 私が使っている新PCがまさにM3チップだったので参考になりました!
- 【IT】M1 MacBookでのpyenvの再導入
- bashの編集
- Vim / Vi を終了させる方法
- How to replace Python x86 packages with arm64 ones?
- pythonでimport時に、ModuleNotFoundError: No module namedが出た時の対処手順
- MacでPythonをインストールする方法
- Python3インストール(Mac編)
備忘録・トライしたけどできなかったこと
pipでrequirements.txtを使ってパッケージを一括インストール
インストールしたいパッケージを記述したテキストファイルを作って、pythonにて一括ダウンロードできればかなり手間が省けたのですが、
$ pip freeze > requirements.txt
がうまく動かず断念しました。一つ一つ地道にインストールしましたorz