published: 2022/5/20 update: 2022/5/20
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
で使いたい、ということがよくあります。
例えば、app2
のview.py
でapp1
のモデルを使いたいとします。
単純には、こうすればいいです。
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.json
のpython.analysis.extraPaths
を設定すればいいらしいです。
以下のような設定を作成します。
{
"python.analysis.extraPaths": ["./app"]
}
もう一度
from app1 import models
を試してみると、今度は警告が表示されず、補完も効くようになりました。
記事に間違い等ありましたら、お気軽に以下までご連絡ください
E-mail: illumination.k.27|gmail.com ("|" replaced to "@")
Twitter: @illuminationK
当HPを応援してくれる方は下のリンクからお布施をいただけると非常に励みになります。
OfuseCopyright © illumination-k 2020-2022.