(いったん簡単に書いておきます、後日もうちょっと詳細書くかも)
大悩み:デスクトップアプリでPythonを呼び出せない。
アプリから仮想環境を作成する際、Python3.9を必要としていたのですが、なぜかPythonが呼び出されない。(Python3.9 command not foundのエラーメッセージ)
ターミナルではPython3.9をダウンロードできているし、Pathもおかしくないはず。
/usr/local/bin/python3.9
原因:パスがうまく設定できておらず、Pythonコマンドを見つけらていない
なんとなくこの原因まではわかっているのですが、じゃあ解決策はなんやねんと。
echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
/usr/local/bin は通常、コマンドの実行ファイルが保存されるディレクトリのため、ここにリンクを作成することが重要です。
じゃあこのパスをシェル設定に追加するのかな?と思い、上をターミナルで実行するもエラーは変わらず。
解決:シンボリックリンクを作成する
/opt/homebrew/bin/python3.9 を python3.9 として認識させるため、シンボリックリンクを作成します。
sudo ln -s /opt/homebrew/bin/python3.9 /usr/local/bin/python3.9
これにより python3.9 コマンドがシステム全体で使えるようになるとのことで、実行すると見事起動。
シンボリックリンクってなんやねん。
シンボリックリンクは、 「あるファイルやディレクトリを別の場所から参照できるようにする、特別な種類のファイル」 です。
通常のファイルとは異なり、シンボリックリンクは実際のファイルのコピーではなく、別のファイルやディレクトリへの参照を作成します。
ショートカットみたいなもんですね。
ターミナルでは、ln -sで、シンボリックリンクを作成できます。
上記の悩みはPython3.9のコマンドを認識するため、
/opt/homebrew/bin/python3.9 という実際のファイルを、/usr/local/bin/python3.9 という場所にシンボリックリンクとして作成するものです。これにより、システム内で python3.9 コマンドを入力すると、実際には /opt/homebrew/bin/python3.9 を指し示すことになります。
シンボリックリンクの特徴
- 別名:シンボリックリンクは、あるファイルやディレクトリに対して「別名」を与えるような感じ
- リンク元とリンク先:シンボリックリンクは元のファイルを指し示す「ポインタ」のような役割を果たす。リンク元(シンボリックリンク)は、リンク先(実際のファイル)へのパスを記録します。
- 動的な参照:シンボリックリンクは元のファイルやディレクトリが更新されても、それに追従します。つまり、リンク先が更新されるとシンボリックリンクもその更新を反映します。
シンボリックリンクを使う理由
- パスを短縮:長いパスを簡単にアクセスできるようにするため。
- 一元管理:複数の場所で同じファイルを使いたい場合、リンクを作成するだけで管理が楽になります。
別の場所からアクセス:異なるディレクトリにあるファイルを、別の場所から簡単に利用することができます。