発端
今までPython環境としてAtomを利用していたが、開発中止から数年経ち、さすがにどうしようもなくなり、VSCodeに乗り換え(Pulsarという継続アプリもあるらしい)。と思ったものの、JupyterLabなどとぶつかり、にっちもさっちもいかない状態に。VSCodeを導入したところ、venv周りの設定でエライ苦労したので、備忘録として記載。
まずは、どうしようもないので以下を参考に、環境のお掃除。
Macの場合、基本的にホームディレクトリ(/User/…)に色々インストールされていくので、ファイルの可視化(Shift + command + .)で普段は見えないファイルを見えるようにして、ズカズカ消していく。「Jupyer」や「.ipython」といったフォルダもどんどん削除して良い。
その後、Homebrew経由、pyenvでpython環境を構築しておく(いつもここを参考にしている)。ホームディレクトリに「python_env」という名前のフォルダを作り、その中に「py39env」や「py311env」などを作り、Pythonのバージョンを切り替えていく。
VSCode
インストール方法はHomebrewでもVSCodeのサイトからでもOK。インストール後、左側のExtensionから、Python, Jupyterなどをインストールしておく。
Interpreterの設定
この時点で、運が良ければ何も考えずそのままPythonスクリプトを実行できる。ただし、numpyやpandasなどのModuleをimportしようとすると、「ModuleNotFoundError」が出現する。これは、Mac本体のPython環境と、VSCodeのPython読み込み環境が異なるためである。試しに、ターミナルアプリケーションと、VSCodeのTERMINAL(command + Jで出現)で
which python
を実行してみたり、VSCode上で
import sys
print(sys.executable)
を実行してみると、異なるPathが表示されるはずである。
解決方法
色々なサイトで色々なことを言っていたが、重要なのは、moduleをinstallした仮想環境と、Python interpreterの環境とを一致させることである。
VSCodeの右下で、Interpreterを選択し(上の画像で3.9.20とでているところ)、ここから上部の検索ウインドウで”Enter interpreter path”を選択。ここに、
~/python_env/py39env/bin/python3.9
と入力する。重要なのは、
~/.pyenv/versions/3.9.20/bin/python
ではなく、必ずvenvで作成したPython仮想環境のバージョンを選択することである。また、コードをInteractive windowで実行している場合は、そちらの環境も同じにしておく(下図)。
ここが設定できていれば、”Extra path”などの設定は基本的に必要ないと考えられる。
これだけなのに、エライ時間がかかってしまった・・・。参考までに、VSCodeのsetting.jsonも残しておく。
{
"python.defaultInterpreterPath": "/Users/UserName/python_env/py311env/bin/python3.11",
"python.terminal.activateEnvironment": false,
"python.autoComplete.extraPaths": [
"/Users/UserName/python_env/py311env/bin/python3.11"
],
"window.zoomLevel": 1,
"extensions.experimental.affinity": {
"ms-toolsai.jupyter": 1,
"ms-toolsai.jupyter-renderers": 1,
"ms-python.python": 1,
"ms-python.vscode-pylance": 1
},
"macros": {
"jupyterExeSelThenCursorDown": [
"jupyter.execSelectionInteractive",
"cursorDown"
]
},
"python.analysis.extraPaths": [
"/Users/UserName/python_env/py39env/bin/python3.9",
"/Users/UserName/python_env/py311env/bin/python3.11",
""
],
"python.dataScience.askForKernelRestart": false,
"python.dataScience.textOutputLimit": 0,
"python.dataScience.useNotebookEditor": false,
"python.dataScience.sendSelectionToInteractiveWindow": false,
"python.dataScience.autoLaunchNotebook": false,
"jupyter.interactiveWindow.textEditor.executeSelection": false,
"jupyter.interactiveWindow.creationMode": "single"
}
参考サイト
https://zenn.dev/mn87/articles/3b39cdb51521b6
https://qiita.com/SNQ-2001/items/3a832fd906db807b8a36
https://4ag4126.blogspot.com/2023/02/vscodemodulenotfounderror.html
参考記事
PythonによるWebスクレイピング
PythonでのスクレイピングとCSVファイルへ書き込み
JSONファイル中にhtmlリンクやimgリンクを入れ込む
コメント