0
2

M1 Mac Book AirからM3 Mac Book Proに移行してPython環境構築した話

Posted at

概要

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の不具合が見つからないことを祈ります。。。

D3473E9A-15D7-4376-B10F-7B8B0C32B6C0.jpeg

参考URL

備忘録・トライしたけどできなかったこと

pipでrequirements.txtを使ってパッケージを一括インストール

インストールしたいパッケージを記述したテキストファイルを作って、pythonにて一括ダウンロードできればかなり手間が省けたのですが、

$ pip freeze > requirements.txt

がうまく動かず断念しました。一つ一つ地道にインストールしましたorz

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2