Fatal Python error: init_stdio_encoding: failed to get the Python codec name of the stdio encoding
Python runtime state: core initialized
LookupError: unknown encoding: windows-31j
Current thread 0x00003470 (most recent call first):
<no Python frame>
2022/11/29 18:07
小川 慶一さんのコメント
(コメントID: 7978)
こんばんは。
"Fatal Python error: init_stdio_encoding: failed to get the Python codec name of the stdio encoding" で検索して、以下の記事を見つけました。
Traceback (most recent call last): File "C:\Program Files\JetBrains\PyCharm 2022.2.4\plugins\python\helpers\pydev\pydevd.py", line 1496, in _exec pydev_imports.execfile(file, globals, locals) # execute the script File "C:\Program Files\JetBrains\PyCharm 2022.2.4\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile exec(compile(contents+"\n", file, 'exec'), glob, loc) File "D:\D Python\Django\flask_to_django-main\metal\views.py", line 11, in <module> from .models import Metal, MetalPurchase ImportError: attempted relative import with no known parent package python-BaseException
靭 宏明さんの投稿
(投稿ID: 5424)
小川 慶一さんのコメント
(コメントID: 7978)
"Fatal Python error: init_stdio_encoding: failed to get the Python codec name of the stdio encoding" で検索して、以下の記事を見つけました。
Pycharmで「LookupError: unknown encoding: windows-31j」が出た時の対処法
https://network-beginner.xyz/lookuperror-unknown-encoding-windows-31j_error
この記事にあった、以下を試してみていただけますでしょうか。
対処法:Pycharmのエンコーディングの設定を「UTF-8」に変更する。
具体的な手順は以下になります。
手順
1. Pycharmを開いて、左上の「File」を選択
2. Settings>Editor>File Encodings>Project Encoding>「UTF-8」に変更
3. Properties Files(*.properties)>「UTF-8」に変更
4. 「OK」を押して、プログラムを実行
上記は、いけそうな気配がいかにもします。
設定確認のうえ、試してみて、結果をお知らせいただければと思います。
よろしく、お願いいたします。
とりいそぎ。
靭 宏明さんのコメント
(コメントID: 7979)
小川 慶一さんのコメント
(コメントID: 7980)
pycharmの設定情報の格納されているディレクトリもいったん削除するとより確実です。
以下の2つのフォルダです。
C:\Users\<username>\AppData\Roaming\JetBrains
C:\Users\<username>\AppData\Local\JetBrains
参考:
https://www.jetbrains.com/help/pycharm/directories-used-by-the-ide-to-store-settings-caches-plugins-and-logs.html#config-directory
https://www.jetbrains.com/help/pycharm/directories-used-by-the-ide-to-store-settings-caches-plugins-and-logs.html#system-directory
靭 宏明さんのコメント
(コメントID: 7981)
https://qiita.com/daker2016/items/f1fcc6df750a9bbc725b
C:\Users\<username>\AppData\Roaming\JetBrains\PyCharm2022.2
にpycharm64.exe.vmoptionsのファイルがありそちらをEmeditorで開きサイトにもある
-Dfile.encoding=UTF-8
の記述を追記したところ解決しました。取り急ぎご連絡まで
小川 慶一さんのコメント
(コメントID: 7982)
なるほど...そんな解決策でしたか。
同じ内容を help -> edit custom vm options でも設定できそうです。
emeditorで編集されたとのことですが、その後、この操作で出てくるダイアログはどうなっていますでしょうか。
藤本 博子さんのコメント
(コメントID: 7984)
動画の掲載ありがとうございます。
私も靭さん、Kosokoさんと同様の unknown encoding: windows-31jが発生しました。
靭さんの方法で解決できました。
靭さん、情報のご提供ありがとうございます。
その後、Pycharmから起動してデバック実行しました。
問題なくターミナルが起動し、runserverが実行できました。
main\views.pyやmetal\vies.pyなどにブレークポイントを入れた後、リファレンスや貴金属の売買を実行しました。
しかし、先生がブレークポイントで止めて検証できる箇所で止まらず実行されてしまいます。
Cntl+F2でいったん停止。
他にプロジェクトが動いてないか確認し、複数のプロジェクトが動いている様子がないことを確認しました。
しかし、やはりブレークポイントで止めることができませんでした。
また後日試してみます。
小川 慶一さんのコメント
(コメントID: 7985)
この問題、続発していますね...。
django アプリの template のデバッグができないときは、 settings で template languages の HTML で django が選択されていないことが多いです。
まずは、確認してみてください。
あとは、別のところで runserver されている場合も。
でも、後者ではなさそうですね...。
小川 慶一さんのコメント
(コメントID: 7986)
それは...何だろう。コード内のブレークポイントを入れた箇所が実際実行されていない...というのが第一感なのですが...いただいた情報だけではちょっと分からないですね。
ともあれ、もう少し試してみて、問題再現方法お知らせください。
1. /metal/views.py の○行目にブレークポイントを入れて
2. 127.0.0.1:8000/metal/xxx/ をブラウザで表示する
とか、そういう感じで。
よろしくお願いします m(_ _)m
kosokoさんのコメント
(コメントID: 7987)
現象1:views.py の24行目にブレークポイントを入れてデバッグしても止まらない
現象2:しかし12行目にブレークポイントを入れてステップインすると 20まで進んだあと32へ飛とび、24行目を飛び越える。
つまりブレークポイントで止まるところはあるが、24行目はブレークポイントが効かないという状態です。
どうすればいいか教えていただけると助かります
藤本 博子さんのコメント
(コメントID: 7988)
こんにちは。
出先なので実機で確認できないのですが、
私はCnt +alt+F9の虫マークのデバックではなく、→ボタンの実行でrunさせたからかもしれません。
明日以降、確認したいと思います。
小底秀史さんのコメント
(コメントID: 7989)
metal/views.by を実行すると下記エラーが表示され止まってしまいます
Traceback (most recent call last):
File "C:\Program Files\JetBrains\PyCharm 2022.2.4\plugins\python\helpers\pydev\pydevd.py", line 1496, in _exec
pydev_imports.execfile(file, globals, locals) # execute the script
File "C:\Program Files\JetBrains\PyCharm 2022.2.4\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "D:\D Python\Django\flask_to_django-main\metal\views.py", line 11, in <module>
from .models import Metal, MetalPurchase
ImportError: attempted relative import with no known parent package
python-BaseException
小川 慶一さんのコメント
(コメントID: 7990)
>現象1:views.py の24行目にブレークポイントを入れてデバッグしても止まらない
>現象2:しかし12行目にブレークポイントを入れてステップインすると 20まで進んだあと32へ飛とび、24行目を飛び越える。
>つまりブレークポイントで止まるところはあるが、24行目はブレークポイントが効かないという状態です。
ブレークポイントで止めることの再現方法が、上記では分かりませんでした。
より詳細に情報いただますでしょうか。
views.py は、metal/views.py でしょうか。それとも、 stock/views.py でしょうか。
たまたまどちらの場合も else: のところですが、20行目、21行目にブレークポイントを入れても動作しないでしょうか。
単に、以下の条件を満たすので、21行目以降の処理が実行されて、 else に飛んでいないだけのようにも読めます。
> metal/views.by を実行すると下記エラーが表示され止まってしまいます
これは、無理です。
ウェブサーバを runserver で起動することはできますが、単体のファイルを実行しようとしても成功しません。
念のために書くと、以下のときに Django のスクリプトは有効に動作します。
1. runserverする
2. ウェブブラウザからページを表示しようとする
よろしく、お願いいたします。
靭 宏明さんのコメント
(コメントID: 7991)
お疲れ様です。先程動画に沿ってPycharmを動かしてみましたがDBの確認もHTMLでの動作確認も出来ました。
動画の操作をする限りでは特に不具合は起こっておりません。
>藤本さん 小底さん
ブレ-クポイントで止まらない現象ですが、WEBサイトからリンクをクリックして実行すると貴金属買取ページのURLが
http://127.0.0.1:8000/metal/buy/ になり
buyの前に「_」が入らないからではないでしょうか。
私も一瞬?と思いましたがurlから直接入力して
http://127.0.0.1:8000/metal/_buy/
のように「_」を含めるようにしたらブレ-クポイントで止められました。
要因が異なるかもしれませんがご参考になれば幸いです
小底秀史さんのコメント
(コメントID: 7992)
ご回答ありがとうございます。無事動作確認できました。
>靭さん
おっしゃる通りに_buyを入れたらブレークポイントで止められました。
小川 慶一さんのコメント
(コメントID: 7993)
ひきつづき、いろいろ試してみてください。
ご相談/ご質問、何でも受けますので、お気軽にどうぞ。
小川 慶一さんのコメント
(コメントID: 7994)
urls.py で、「どのパスにリクエストが来たら、どの関数/クラスを使って処理をする」ということを指定しています。
urls.py もこの機会に見てみてください!
藤本 博子さんのコメント
(コメントID: 7995)
お世話になっております。
ブレークポイントをいれて必要なところで止める件につきまして、
debugではなく、Runで実行させたことが原因のようでした。
動画一連のデバッグや、dbs.sqlite3 購入したデータなどがdatabaseに格納されていることを確認しました。
動かすだけで精一杯でした…
・動画5:00 reference/ページへリクエストを送る
main\views.py getで止める
24行目 class ReferenceView(View):
def get(self, request, *args, **kwargs):
readmd_str = Path(__file__).parent.parent.joinpath('templates', 'reference.md').read_text(encoding='utf-8')
でブレークポイントを入れ、readmd_strやnoteなどの属性を確認できました。
・reference/ページへリクエストを送る
main\urls.py urlpatternsのリストに、reference/というviews.ReferenceView.as_view()を使うとプログラムされていることを確認。
その後F9でデバックを進め 30行目
を実行後に、reference/ページへ遷移しました。
templates\reference\reference.htmlのファイルの内容を読み込んで表示されるのですね。
reference.htmlのヘッダー名を編集したら、その内容が反映されました。
・動画8:00
metal/_/ Django貴金属へようこそ!のページ
metal\views.py
14行目 def metal_top_view(request)の関数をみにいくことを確認しました。
Metal.objects.all()を属性を確認できました。
metal\urls.py 8行目
urlpatternsのリスト 127.0.0.1.8000/metal/_/に行くと、
views.metal_top_viewの関数をみにいくと書かれている。
なお、サンプルコードは"/"バックスラッシュが抜けているので、追加が必要
・動画9:00 metal/_buy/ 買取ページ
GETとPOSTを確認する
∟GET 9:28
meta/_buy/のURLを実行
23行目 return render(request, 'metal/buy.html', context)
metalsやcontextの変数の中身を確認できる。
∟POST 10:14
買取ページを実行すると、24行目以降のPOSTの条件分岐にいく
金属の種類:変数 matal_name、重さやメールアドレス、氏名も変数weight,email,nameで確認できる。
最後にbuy_thanks/ページへリダイレクトする。
・動画11:02 dbs.sqlite3の確認
購入したデータなどがdatabaseに格納されていることを確認しました。
管理者画面127.0.0.1:8000/adiminにも同様の内容が確認されいることを確認しまた。
その後も一応動画の動作を確認しました。
こんなに複雑な構造を理解できるのか不安ですが、少しづつ勉強したいです。
ありがとうございます。
小川 慶一さんのコメント
(コメントID: 7998)
ありとうございます。
気がついて、直してからアップしたつもりだったのですが...。修正して再アップしました。
引きつづき、よろしくお願いいたします。