タイトル通りなのですが…
バグなのでは?
- 確認したバージョンは以下の通りです。
- VS Code 1.51.0, 1.88.1
- Python 3.8.5, 3.11.0
- Java 22.0.1
Python以外のデバッグできる言語を使っていないので他の言語は不明です…。
⇒ Javaでも起きます。2回目以降のデバッグでcdする際にパスが変化してデバッグの際エラーになります。(デバッグ自体は可能)
追記24/05/03:GitHubにIssue出しました
が、なんか反応が鈍い…
もし一度でも困ったことがある方いましたら、よければIssueに「私も困ってるんですが」的なコメント等いただけると、重要性が伝わりそうなので良ければよろしくお願いします!
追記:最下部に解決法が書いてあります
「追記3:解決法が(一応)わかりました」のとこ。
(こんなポンコツ記事でもお役に立てたら嬉しいです)
デバックの開始時にパスから記号が削除される
PS C:\Users\User\Documents\○個人用ファイル> & 'C:\Program Files\Python38\python.exe' 'c:\Users\User\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy\launcher' '62606' '--' 'c:\Users\User\Documents\個人用ファイル\test.py'
Traceback (most recent call last):
File "C:\Program Files\Python38\lib\runpy.py", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Program Files\Python38\lib\runpy.py", line 87, in _run_code
exec(code, run_globals)
cli.main()
File "c:\Users\User\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy/..\debugpy\server\cli.py", line 430, in main
run()
File "c:\Users\User\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy/..\debugpy\server\cli.py", line 267, in run_file
runpy.run_path(options.target, run_name=compat.force_str("__main__"))
File "C:\Program Files\Python38\lib\runpy.py", line 264, in run_path
code, fname = _get_code_from_file(run_name, path_name)
File "C:\Program Files\Python38\lib\runpy.py", line 234, in _get_code_from_file
with io.open_code(decoded_path) as f:
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\Users\\User\\Documents\\個人用ファイル\\test.py'
PS C:\Users\User\Documents\○個人用ファイル>
python.exe
に渡しているパスから記号(○)が消えてしまっています。
今まで(VSCodeを使い始める前)は日本語は通常通り使えていたので、丸の記号がダメみたいです。
困るんですけど…。
フォルダ名を変更しなくてもなんとかできる方法ないですかね…。
どの文字が消えるのか検証してみる
ShiftJISの記号のどこが消されてるのか確認してみます。
なお、Pythonコードの内容はprint("success")
だけ。
検証コード(邪魔なので折り畳み)
```PowerShell:0_半角カナ PS C:\Users\Ika3\Documents\テスト用> cd 'c:\Users\Ika3\Documents\テスト用'; & 'C:\Program Files\Python38\python.exe' 'c:\Users\Ika3\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy\launcher' '63779' '--' 'c:\Users\Ika3\Documents\テスト用\0_半角カナーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚\test.py' Traceback (most recent call last): (省略) FileNotFoundError: [Errno 2] No such file or directory: 'c:\\Users\\Ika3\\Documents\\テスト用\\0_半角カナーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚\\test.py' PS C:\Users\Ika3\Documents\テスト用\0_半角カナ。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚> ```PS C:\Users\Ika3\Documents\テスト用> cd 'c:\Users\Ika3\Documents\テスト用'; & 'C:\Program Files\Python38\python.exe' 'c:\Users\Ika3\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy\launcher' '63788' '--' 'c:\Users\Ika3\Documents\テスト用\1_普通の記号 、。,.:;?!`^ ̄_ヽヾゝゞ〃仝々〆〇ー/\~|()〔〕[]{}〈〉《》「」『』【】+-=<>¥$¢£%#&*@〒〓¬Å\test.py'
Traceback (most recent call last):
(省略)
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\Users\\Ika3\\Documents\\テスト用\\1_普通の記号\u3000、。,.:;?!`^ ̄_ヽヾゝゞ〃仝々〆〇ー/\~|()〔〕[]{}〈〉《》「」『』【】+-=<>¥$¢£%#&
*@〒〓¬Å\\test.py'
PS C:\Users\Ika3\Documents\テスト用\1_普通の記号 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓∈∋⊆⊇⊂⊃∪∩∧∨¬⇒⇔∀∃・∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬ʼn♯♭♪†‡¶◯>
PS C:\Users\Ika3\Documents\テスト用> cd 'c:\Users\Ika3\Documents\テスト用'; & 'C:\Program Files\Python38\python.exe' 'c:\Users\Ika3\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy\launcher' '63734' '--' 'c:\Users\Ika3\Documents\テスト用\2_全角文字0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\test.py'
success
PS C:\Users\Ika3\Documents\テスト用\2_全角文字0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz>
PS C:\Users\Ika3\Documents\テスト用> cd 'c:\Users\Ika3\Documents\テスト用'; & 'C:\Program Files\Python38\python.exe' 'c:\Users\Ika3\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy\launcher' '63742' '--' 'c:\Users\Ika3\Documents\テスト用\3_普通のかなカナぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわ
ゐゑをんァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ\test.py'
success
PS C:\Users\Ika3\Documents\テスト用\3_普通のかなカナぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんァアィ
イゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ>
PS C:\Users\Ika3\Documents\テスト用> cd 'c:\Users\Ika3\Documents\テスト用'; & 'C:\Program Files\Python38\python.exe' 'c:\Users\Ika3\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy\launcher' '63747' '--' 'c:\Users\Ika3\Documents\テスト用\4_ギリシャ文字ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω\test.py'
success
PS C:\Users\Ika3\Documents\テスト用\4_ギリシャ文字ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω>
PS C:\Users\Ika3\Documents\テスト用> cd 'c:\Users\Ika3\Documents\テスト用'; & 'C:\Program Files\Python38\python.exe' 'c:\Users\Ika3\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy\launcher' '63754' '--' 'c:\Users\Ika3\Documents\テスト用\5_キリル文字АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя\test.py'
success
PS C:\Users\Ika3\Documents\テスト用\5_キリル文字АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя>
PS C:\Users\Ika3\Documents\テスト用> cd 'c:\Users\Ika3\Documents\テスト用'; & 'C:\Program Files\Python38\python.exe' 'c:\Users\Ika3\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy\launcher' '63797' '--' 'c:\Users\Ika3\Documents\テスト用\6_罫線\test.py'
Traceback (most recent call last):
(省略)
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\Users\\Ika3\\Documents\\テスト用\\6_罫線\\test.py'
PS C:\Users\Ika3\Documents\テスト用\6_罫線─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂>
PS C:\Users\Ika3\Documents\テスト用> cd 'c:\Users\Ika3\Documents\テスト用'; & 'C:\Program Files\Python38\python.exe' 'c:\Users\Ika3\.vscode\extensions\ms-python.python-2020.10.332292344\pythonFiles\lib\python\debugpy\launcher' '63768' '--' 'c:\Users\Ika3\Documents\テスト用\7_機種依存文字ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡㍻〝〟㏍㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼\test.py'
Traceback (most recent call last):
(省略)
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\Users\\Ika3\\Documents\\テスト用\\7_機種依存文字ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡㍻〝〟㏍㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼\\test.py'
PS C:\Users\Ika3\Documents\テスト用\7_機種依存文字①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ・㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡㍻〝〟№㏍℡㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪>
結果
Unicodeのなんやかんやが関係してそう?かも?
その辺は全く知らないので結果がバラけている!としかいえない…
消える
-
0_半角カナ
。「」、・ヲァィゥェォャュョッ -
1_普通の記号
・゛゜´¨―‐∥…‥‘’“”±×÷≠≦≧∞∴♂♀°′″℃§☆★○●◎◇◆□■△▲▽▼※→←↑↓∈∋⊆⊇⊂⊃∪∩∧∨⇒⇔∀∃・∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬‰♯♭♪†‡¶◯ -
6_罫線(全滅)
─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂ -
7_機種依存文字
①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳・№℡≒≡∫∮∑√⊥∠∟⊿∵∩∪
消えない
-
0_半角カナ
ーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚ -
1_普通の記号
、。,.:;?!`^ ̄_ヽヾゝゞ〃仝々〆〇ー/\~|()〔〕[]{}〈〉《》「」『』【】+-=<>¥$¢£%#&*@〒〓¬Å -
2_全角数字系
(全て残る) -
3_普通のかなカナ
(全て残る) -
4_ギリシャ文字
(全て残る) -
5_キリル文字
(全て残る) -
7_機種依存文字
ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡㍻〝〟㏍㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼
追記:原因はPowerShellの不具合
PowerShellのPSReadLine
モジュールの不具合だそうです。
参考URL:windows - PowerShell(x64)のウィンドウに、ファイル名に記号を含むファイルをドラッグ&ドロップすると文字が欠落してしまう - スタック・オーバーフロー
参考URL2:PowerShell で全角文字を入力すると表示がおかしくなる問題について
これは、PowerShellの文字に色を付けて見やすくする機能が全角文字を扱うの下手くそ(意訳)だという不具合だそうなのですが…
それに関連して、PowerShellのウィンドウにファイルをドラッグ&ドロップで渡すと特定の記号が消失する、という不具合も発生しているようです。
VSCodeのデバッグ時にパスを渡すときにドラッグ&ドロップのような方法でパスを渡しているらしく、それのせいで上述の記号が消失し、パスが違うものになってしまっているみたい。
なお、22年9月現在もこの不具合は全く修正されていないようです。
解決策案
- パスに全角文字が入らないようにする
- 解決してない
- VSCodeの設定の
terminal.integrated.defaultProfile.windows
から、既定のターミナルをcmd.exe
に変更する- せっかくのPowerShellを使わなくなるが、楽
- PowerShellから
PSReadLine
をRemove-Module
もしくはUninstall-Module
する- いろいろ試したが、できなかった。色を付けるだけのモジュールらしいので、できるならこれが手軽かも
参考:Stack Overflow - 追記:管理者権限の
cmd.exe
からPowerShell Uninstall-Module PSReadLine -RequiredVersion 2.0.0
というようにやるといいかも?(未確認) - 追記2:上記コマンドを実行しても、アンインストールされずに2.0.0がしつこく残り続ける。
- いろいろ試したが、できなかった。色を付けるだけのモジュールらしいので、できるならこれが手軽かも
- PowerShellの
PSReadLine
をInstall-Module
もしくはUpdate-Module
してバージョンを2.2.6
にし、PSReadLine
を読み込めなくする- 解決策として頭が悪い(偶然読み込まなくなっただけ…というかなんで読み込まなくなったのかナゾ)
- 追記:PSスクリプトファイルを実行できるようにするために
Set-ExecutionPolicy RemoteSigned
でセキュリティを緩くしたところ、再びPSReadLine
が読み込まれるようになった。日本語が表示できなくなるので困る。よくわかっていないが、要するにアップデートしたことによって署名が無効なモジュールになったせいで読み込めなくなった…ということだったみたい?(困る) - 追記2:一時的に
Set-ExecutionPolicy AllSigned
にしてPSReadLine
を再インストールしようとしたところ、「署名が無効です」的なエラーが出てインストールできなくなっていた。
Install-Module PSReadLine -Force -SkipPublisherCheck
で署名の検証をスキップすることでインストールを強行したところ、再びPSReadLine
を読み込めなくなり、再びPythonコードをデバッグできるようになった。
加えてなんと、Set-ExecutionPolicy RemoteSigned
の状態でもPSReadLine
を読み込まなくなった。
めでたしめでたし。(めでたくない) - 追記3:結局なんで
PSReadLine
を読み込まなくなったのかよくわかっていなかったが、やっと原理がわかった。上記の追記2ではなんで読み込まなくなったのかわかっていなかった。(後述)
追記3:解決法が(一応)わかりました
方法1
- 管理者権限のPowerShellを起動しておく
-
Install-Module PSReadLine -Force
を実行し、バージョンの新しいPSReadLine
をインストールする -
Set-ExecutionPolicy
で実行ポリシーの変更をしていなければ、PowerShell起動時にインストールしたPSReadLine
を読み込もうとして失敗するようになる - 悪さをしているへっぽこ
PSReadLine
がいなくなるので、どんな全角文字でもPowerShellに渡せるようになる - めでたしめでたし
方法2
スクリプトファイル*.ps1
の実行のためにSet-ExecutionPolicy RemoteSigned
してあり、上記の方法1ではPowerShell起動時にPSReadLine
を読み込んでしまう場合。
- 管理者権限のPowerShellを起動しておく
-
Get-ExecutionPolicy -List
で現在の実行ポリシーの状態を表示し、覚えておく -
Set-ExecutionPolicy AllSigned
を実行し、実行ポリシーをAllSigned
に変更する - PowerShellで
Install-Module PSReadLine -Force
を実行し、バージョンの新しいPSReadLine
をインストールする - PowerShellを新しく起動し、インストールした
PSReadLine
を読み込もうとして下記のメッセージが出るこの信頼されていない発行元からのソフトウェアを実行しますか? ファイル C:\Program Files\WindowsPowerShell\Modules\PSReadline\2.3.4\PSReadLine.format.ps1xml の発行元は CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US であり、このシステムで信頼されていません。信頼された発行元からのスクリプトのみを実行してください。 [V] 常に実行しない(V) [D] 実行しない(D) [R] 一度だけ実行する(R) [A] 常に実行する(A) [?] ヘルプ (既定値は "D"):
-
[V] 常に実行しない(V)
を選択し、Microsoftの証明書を信頼しない発行元に追加してしまう(強引) - 以降、
PSReadLine
を読み込みたくても読み込まなくなる - めでたしめでたし
- 忘れずに
Set-ExecutionPolicy RemoteSigned
(もしくは他のポリシー)を実行し、実行ポリシーを1.の状態に戻しておく
ほかにもMicrosoft製モジュールをインストールしている場合、そっちも問答無用で読み込まなくなりそう…
なお、信頼しない設定を解除したい場合は
コントロールパネル>インターネットオプション>コンテンツ>証明書>信頼されない発行元>Microsoft Corporation
で「削除」を行うことで設定を解除することができる。
参考ページ
同じ現象について言及しているブログ
Set-ExecutionPolicy
解説ページ
Install-Module
で署名の検証を突破する方法
ただの文字コード表
「常に実行しない」の解除方法