LoginSignup
0
0

More than 3 years have passed since last update.

DjangoでTypeError: resolve() got an unexpected keyword argument 'strict'という見慣れないエラーが出た

Last updated at Posted at 2020-09-02

はじめに

作成したDjangoアプリをAWS EC2(Ubuntu16.04)にデプロイする過程で、以下のエラーに遭遇したため対処法を書き残します。

エラーの内容

Ubuntu内でDjangoプロジェクトをgit cloneした後、python3 manage.py makemigrationsを実行したところ、

TypeError: resolve() got an unexpected keyword argument 'strict'

というエラーが表示されました。

settings.py
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve(strict=True).parent.parent

の1文がエラーとなっているようです。
これはDjangoのmanage.pyがある基本ディレクトリの絶対パスを取得する記述です。

ここについては特にいじった記憶がないためなんでだろうと思いググると、Django3.1以降とその前でこの部分の記述が変わっていることがわかりました。

今回ローカルではPython3.8+Django3.1で開発していましたが、確認したところUbuntuにはPython3.5+Django2.2がインストールされており、どうやらバージョンの違いによるエラーのようです。

resolveメソッドのstrict引数はpython3.6以降で追加されたようなので、ここが根本の原因でしょう。

解決方法

本来であればUbuntu内のDjangoのバージョンに合わせて開発する必要がありますが、今回はデプロイできるか簡単に試したかっただけなので、settings.pyをDjango2.2に合わせた記述に変えてあげます。

settings.py
# こちらはDjango3.1以降
# from pathlib import Path
# BASE_DIR = Path(__file__).resolve(strict=True).parent.parent

# 従来の記述
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

こうすることで無事エラーは解消され、migrationが成功しました。

言語やフレームワークのバージョン管理は開発において特に重要なことだと思うので今後は十分に気を付けていきたいと思います。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0