実現したいこと
PyCharmでmakemigrationを行った時に、エラー無く、migrationファイルが作成できるようにしたい。
下記のエラーの原因は「ファイル内にutf-8でない文字コードが紛れ込んでいる」という理解であっていますか?
もし、それで合っているとしたら、それをPyCharmを使ったりして調べる方法はありますか?(本サンプル・プログラムで作成したファイルをPyCharm上で見てみたのですが、文字化けしている箇所は無いようなのですが。)
発生している問題・分からないこと
『動かして学ぶ!Python Django開発入門(第2版)』を勉強しています。p246「django-allauth用のマイグレーションを行う」のところで下記エラーが出てしまいました。
p217「マイグレーションを行う」時点ではエラーは出ていませんでした。
どのファイルのどの行がエラーなのか分からず(manage.pyのline 19,23が原因とは思えない)、試行錯誤の方向性がわかりません。
エラーメッセージ
error
1C:\Users\user\venv_private_diary\Scripts\python.exe C:\Users\user\venv_private_diary\private_diary\manage.py makemigrations 2Traceback (most recent call last): 3 File "C:\Users\user\venv_private_diary\private_diary\manage.py", line 23, in <module> 4 main() 5 File "C:\Users\user\venv_private_diary\private_diary\manage.py", line 19, in main 6 execute_from_command_line(sys.argv) 7 File "C:\Users\user\venv_private_diary\Lib\site-packages\django\core\management\__init__.py", line 442, in execute_from_command_line 8 utility.execute() 9(中略) 10 File "C:\Users\user\venv_private_diary\Lib\site-packages\psycopg2\__init__.py", line 122, in connect 11 conn = _connect(dsn, connection_factory=connection_factory, **kwasync) 12 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 13UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 69: invalid start byte 14 15プロセスは終了コード 1 で終了しました 16 17(中略)の部分はFile "C:\Users\user\venv_private_diary\Lib\site-packages\django\… 18というdjangoのファイルが並んでいます
該当のソースコード
python
1#!/usr/bin/env python 2"""Django's command-line utility for administrative tasks.""" 3# -*- coding: utf-8 -*- 4import os 5import sys 6 7 8def main(): 9 """Run administrative tasks.""" 10 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'private_diary.settings') 11 try: 12 from django.core.management import execute_from_command_line 13 except ImportError as exc: 14 raise ImportError( 15 "Couldn't import Django. Are you sure it's installed and " 16 "available on your PYTHONPATH environment variable? Did you " 17 "forget to activate a virtual environment?" 18 ) from exc 19 execute_from_command_line(sys.argv) ←line19 20 21 22if __name__ == '__main__': 23 main() ←line23 24
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
上記の様に、manage.py内に
-- coding: utf-8 --
の一行を追加した。→同じエラー
本に書かれている内容で重要そうな箇所を、コード内にコメントとして書いていた部分を消した。→同じエラー
補足
特になし
これアプリケーション動いてデータベースにアクセス出来てますか?
settings.pyのデータベース設定にシフトJISが混じってそうな感じに見えます。
コメントありがとうございます。
runserverやshowmigrationsを行っても、同じエラーがでてしまいます。ブラウザでアクセスしようとしても「このサイトにアクセスできません127.0.0.1 で接続が拒否されました。」というエラーです。
仮想環境を構築しなおして、この本のサイトからサンプルファイルをダウンロードして、Chapter10フォルダの中身をコピペしても、同じ結果なので 呆然としています。(←この方法でダメということは、シフトJISの混入等とは考えにくくなってきました。)
原因は間違いなく文字コードですが、本を持っていないので、正確に再現することが出来ません。
10章とやらをやっているようですが、他の章は順番にやってきていますか?
多少設定をいじったりインストールしたりはしているので、そこが本と同じか分かりませんが(あとpostgresqlを使うのは面倒だったのでsqlite3にしてますが)とりあえず動いてますよ。
ブラウザで見ると「あなた専用の日記保存サービス」とやらが綺麗なデザインで表示されています。
10章は「djangoに認証機能を追加する」というものです。第1章から順番にやっており、こういうエラーはでなかったのですが、この章でつまづきました。
↑のように著者作成のサンプルファイルをChapter9に戻してみたのですが、それでもダメです。もう訳が分かりません。
とりあえずvenvらしき環境に入ってから
・python --version
・pip freeze
の結果と、中略を略さないエラー出力を貼ってください。まずはそこからですね。
Python 3.12.1
asgiref==3.7.2
certifi==2024.2.2
cffi==1.16.0
charset-normalizer==3.3.2
cryptography==42.0.5
defusedxml==0.7.1
Django==5.0.2
django-allauth==0.61.1
django-bootstrap5==23.4
idna==3.6
oauthlib==3.2.2
psycopg2-binary==2.9.9
pycparser==2.21
PyJWT==2.8.0
python3-openid==3.2.0
requests==2.31.0
requests-oauthlib==1.3.1
sqlparse==0.4.4
tzdata==2024.1
urllib3==2.2.1
C:\Users\user\venv_private_diary\Scripts\python.exe C:\Users\user\venv_private_diary\private_diary\manage.py makemigrations
Traceback (most recent call last):
File "C:\Users\user\venv_private_diary\private_diary\manage.py", line 22, in <module>
main()
File "C:\Users\user\venv_private_diary\private_diary\manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "C:\Users\user\venv_private_diary\Lib\site-packages\django\core\management\__init__.py", line 442, in execute_from_command_line
utility.execute()
File "C:\Users\user\venv_private_diary\Lib\site-packages\django\core\management\__init__.py", line 436, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Users\user\venv_private_diary\Lib\site-packages\django\core\management\base.py", line 413, in run_from_argv
self.execute(*args, **cmd_options)
File "C:\Users\user\venv_private_diary\Lib\site-packages\django\core\management\base.py", line 459, in execute
output = self.handle(*args, **options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\venv_private_diary\Lib\site-packages\django\core\management\base.py", line 107, in wrapper
res = handle_func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\venv_private_diary\Lib\site-packages\django\core\management\commands\makemigrations.py", line 158, in handle
loader.check_consistent_history(connection)
File "C:\Users\user\venv_private_diary\Lib\site-packages\django\db\migrations\loader.py", line 313, in check_consistent_history
applied = recorder.applied_migrations()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\venv_private_diary\Lib\site-packages\django\db\migrations\recorder.py", line 89, in applied_migrations
if self.has_table():
^^^^^^^^^^^^^^^^
File "C:\Users\user\venv_private_diary\Lib\site-packages\django\db\migrations\recorder.py", line 63, in has_table
with self.connection.cursor() as cursor:
^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\venv_private_diary\Lib\site-packages\django\utils\asyncio.py", line 26, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\venv_private_diary\Lib\site-packages\django\db\backends\base\base.py", line 316, in cursor
return self._cursor()
^^^^^^^^^^^^^^
File "C:\Users\user\venv_private_diary\Lib\site-packages\django\db\backends\base\base.py", line 292, in _cursor
self.ensure_connection()
File "C:\Users\user\venv_private_diary\Lib\site-packages\django\utils\asyncio.py", line 26, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\venv_private_diary\Lib\site-packages\django\db\backends\base\base.py", line 275, in ensure_connection
self.connect()
File "C:\Users\user\venv_private_diary\Lib\site-packages\django\utils\asyncio.py", line 26, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\venv_private_diary\Lib\site-packages\django\db\backends\base\base.py", line 256, in connect
self.connection = self.get_new_connection(conn_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\venv_private_diary\Lib\site-packages\django\utils\asyncio.py", line 26, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\venv_private_diary\Lib\site-packages\django\db\backends\postgresql\base.py", line 277, in get_new_connection
connection = self.Database.connect(**conn_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\venv_private_diary\Lib\site-packages\psycopg2\__init__.py", line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 69: invalid start byte
プロセスは終了コード 1 で終了しました
となりました
https://www.shoeisha.co.jp/book/detail/9784798174198
の付属データからサンプルをダウンロード
10章のprivate_diaryフォルダへ
venv環境を作成し、環境に入ってから、pip install -rでfreezeしたバージョンのパッケージをインストール
private_diary/settings_common.py: MIDDLEWAREにallauth.account.middleware.AccountMiddlewareを追加
private_diary/settings_dev.py: SECRET_KEYに適当な鍵文字列を記述
localhostでpostgresqlを配置し、private_diaryというDBを作成
set DB_USER=postgresqlのユーザー名
set DB_PASSWORD=postgresqlのパスワード
python manage.py runserver --settings private_diary.settings_devを実行
で起動した。
一応言っておくと、本のホームページ上にはdjangoのバージョンは3.2とあるのに、お使いのバージョンが5だったので、いろいろおかしい可能性はある。まあ最初のページは動いてるし、質問のエラーとは関係ないと思うけど。
本件まだ解決できてないのでしょうか?
きちんと言っておくと、makemigrationsもmigrateも成功し、起動もしますよ。
つまり、最初に言ったとおり、あなたが編集したファイルのいずれかにシフトJISが混入しているだけの可能性が高く、エラーからはsettings.py辺りが疑われます。
あなたが質問した状況を再現する手順を正確に記載するか、私の手順で問題が起こるのかどうかを確認する必要がありますよね?
いずれも行わずに放置する場合は私も環境を消して、以降対応をやめますが…
dameo様
大変申し上げにくいのですが、このコメントも含め 私の質問への回答・コメントは、今後お控え願えますよう、お願い申し上げます。
回答1件
あなたの回答
tips
プレビュー