⚙️

【Importパスエラー解消】Docker環境下でPoetry+Pylanceで開発を進めている時のVS Codeの設定

2022/06/05に公開

概要

Docker 環境下で Poetry + VS Code + Pylance にて開発を進めている時に、Pylance の import のパス解決設定でハマったので備忘録として残しておきます。

設定方法

(必要であればだが、非推奨)仮想環境を無効化

仮想環境の無効化

個人的には Docker 環境下で仮想環境を作成するのもあれなので、無効にしています。
ここは各々の状況等で判断してください。
Poetry の仮想環境の無効化は以下のコマンドで設定します。

poetry config virtualenvs.create false

無効化できたかどうかはターミナル等でpoetry config --listコマンドを実行し、virtualenvs.create = falseになっているかを確認します。
その後、すでに Poetry の管理下にあるプロジェクトがある場合はpoetry installでグローバルにパッケージをインストールしておきます。

VS Code の設定

1. パッケージインストール先を確認

poetry env infoを実行し、仮想環境の場所を確認します。以下は例です。

Virtualenv
Python:         3.10.1
Implementation: CPython
Path:           /path/to/poetry/cache/virtualenvs/test-example-py3.10
Valid:          True

Base
Platform: darwin
OS:       posix
Python:   /path/to/main/python

Path項目のパスの下層にlib/python3.10/site-packagesがあると思うので、確認してください。
このディレクトリがパッケージのインストール先になります。
2 番目の手順でこのパスを使用します。

2024/05/25 以前の内容

2024/05/25 以前の内容

※一部内容が間違っていたので、修正いたしました。(2022/06/09 現在)

まず、パッケージインストール先を確認します。
pythonコマンドを実行し、対話的に以下を実行していきます。
パッケージインストール先の確認にはsys.pathを使用します。

>> import sys
>>> import pprint
>>> pprint.pprint(sys.path)
['',
 '/usr/local/lib/python39.zip',
 '/usr/local/lib/python3.9',
 '/usr/local/lib/python3.9/lib-dynload',
 '/usr/local/lib/python3.9/site-packages']

上記を実行することで、site-packagesの場所がわかりました。
念のため、site-packagesディレクトリの中にインストールしたライブラリがあるか確認しておくのがよいでしょう。

2. python.analysis.extraPathsの設定

続いて.vscode/settings.jsonにて、モジュールインポート先を明示的に定義します。
定義するパスは 前セクションで確認した仮想環境の作成先のディレクトリパスです。

"python.analysis.extraPaths": [
    "/path/to/poetry/cache/virtualenvs/test-example-py3.10/lib/python3.10/site-packages"
],

設定が終了したら、VS Code の再読み込みを行ってください。
以上で設定は終了です。

参考文献

Discussion