DjangoでPylanceがimportを解決しない問題の対処法

published: 2021/2/17 update: 2021/2/17

Table of Contents

TL; DR

Pylanceは非常に優れたコーディング支援拡張機能ですが、importがよく解決されなくて困っていました。小規模開発のときはまあいいか、と思ったりするのですが、djangoとかで解決されないと結構手間なので、解決法を調べたら解決したので書いておきます。

状況

ディレクトリ構成

appが増えてくると、分割したくなります。よく作るのはこんな感じです。

app
├── app1
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── app2
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── config
│   ├── __init__.py
|   ...
└── manage.py

問題点

app1で定義したモデルをapp2で使いたい、ということがよくあります。

例えば、app2view.pyapp1のモデルを使いたいとします。

単純には、こうすればいいです。

from app1 import models

しかし、これだとPylanceの補完が効かずImport "app1" could not be resolvedという警告が表示されます。

じゃあ相対インポートにすれば解決するかな、と考えます。

from ..app1 import models

Pylanceは警告を出さなくなります。補完も効きます。

しかし、いざdjangoを起動させようとするとValueError: attempted relative import beyond top-level packageが起こります。

sys.pathを使うのはありかもしれませんが、毎回書くのは嫌です。

解決策

コード側で解決する方法は調べてもわかりませんでした。そこで、Pylance側の設定をどうにかすることで強引な解決を図りました。Pylanceのトラブルシューティングを読むと、Unresolved import waningsという項目があります。

これによると.vscode/settings.jsonpython.analysis.extraPathsを設定すればいいらしいです。

以下のような設定を作成します。

".vscode/settings.json"
{
    "python.analysis.extraPaths": ["./app"]
}

もう一度

from app1 import models

を試してみると、今度は警告が表示されず、補完も効くようになりました。

記事に間違い等ありましたら、お気軽に以下までご連絡ください

E-mail: illumination.k.27|gmail.com ("|" replaced to "@")

Twitter: @illuminationK

当HPを応援してくれる方は下のリンクからお布施をいただけると非常に励みになります。

ofuse

Site Map

Table of Contents

  - TL; DR

  - 状況

    - ディレクトリ構成

    - 問題点

  - 解決策


当HPを応援してくれる方は下のリンクからお布施をいただけると非常に励みになります。

ofuse
Privacy Policy

Copyright © illumination-k 2021.