VSCode: ファイル名タブの M や U を消す設定

VSCode v1.55 から、エディタ上部のファイル名タブの装飾がデフォルトで有効になりました。

編集中のファイル名の右に表示されるこのマークは「バッジ」と呼ばれており、これはソース管理(Git リポジトリ)の変更状態(M や U など)に相当するものです。

ただ、バッジがなくてもファイル変更の有無は確認できる為、これはあまり有益な機能ではなく、折角のシンプルさを損なってしまっているようにも感じます。

バッジの有無の設定方法

バッジの表示機能は設定で簡単に無効化できます。
設定方法は次の通りです。

  1. コマンドパレット (Ctrl+Shift+P) に settings と入力し、「基本設定: 設定 (UI) を開く」を選択。
  2. workbench.editor.decorations.badges と入力して出てくるチェックボックスをオフにする。

また、エクスプローラーの「開いているエディター」や「ワークスペース」のバッジの有無は同様に explorer.decorations.badges で切り替えられます。

VSCode で def や if 等のスニペットが出なくなったら(Python)

VSCode で Python 拡張機能 (Microsoft) を有効にしている場合、def や if, for, try などの文でスニペットによる入力補完(サジェスト)が効くのですが、この機能が 2021年1月21日のバージョンで削除されました。

公式ページ (github) のリリースノートには、「コードスニペットは削除したので、もし必要なら自分で追加してね」という旨の記述があります。

  1. Remove code snippets (you can copy the old snippets and use them as your own snippets).
    Releases · microsoft/vscode-python

スニペットの追加方法

Python 拡張で提供されていたスニペットをユーザースニペットとして追加すると、入力補完機能を復元できます。
手順は次の通りです。

  1. コマンドパレット (Ctrl+Shift+P) に snippet と入力し、「基本設定: ユーザースニペットの構成」を選択。
  2. python と入力し、“python.json” を選択。
  3. エディタで “python.json” が開かれるので、下記 URL のスニペットをコピペする等して追加する。
    vscode-python/python.json at 2020.12.424452561 · microsoft/vscode-python

スニペットを修正

お好みで、あまり使わないコードスニペットをコメントアウトすると、より快適になります。
また、一部のスニペットは Python 3 では若干使いにくいので、これらに少し手を加えます。

def の修正と追加

“def(class method)” という名前のスニペットは Python の @classmethod ではなく、Python 公式の表現に従えばインスタンスメソッドにあたります。
そこで、これらを解りやすいように名前変更し、@classmethod の def を追加します。

元の “def(class method)” と “def(static class method)” の部分を次のように書き換えます。

class の修正

class は object を明示的に継承しなくても定義できる為、object を消去します。
下記の例では継承も考慮して () は残してありますが、こちらも削除したほうが使いやすいかもしれません。

Path オブジェクトを更新日時でソートする (Python 3)

Path オブジェクトのリストを更新日時でソートしたいときは次のようにする。

.sort() メソッドには key として file.stat().st_mtime を渡したいものの、key に指定できるのは引数を1つ取る関数だけなので os.path.getmtime(path) を利用する。

降順ソート

降順(逆順)のソート結果が欲しいときは reverse 引数を指定する。

ファイルサイズ・作成日時によるソート

key として os.path.getsize(path) を指定すれば、ファイルサイズでソートできる。

同様に os.path.getctime を key にすることでファイル作成日時でソートできる (Windows の場合)。

※ Python 3.9 で動作確認。

参考

Python スクリプトを途中で終了させる (exit)

エラー発生等で、Python のスクリプトを任意の場所で終了させたくなった時、PHP 等に有る組み込みの exit() が Python には無いことに少し驚くかもしれません。

正確に言えば、exit() は使える事が多いものの、それは Python の対話的インタープリタシェル用のものなので、スクリプト中では使うべきではないと公式ドキュメントに書かれています。

一般的な終了方法

Python では通常、次のようにして中途終了します。

しかしこの方法だと、exit の為だけに sys モジュールをインポートしなければなりません。
また、exit 以外で sys を使うことはあまり無いので、これは無駄な手間のように思えます。

例外を送出して終了

公式ドキュメントの sys.exit() には次のように書かれています。

Python を終了します。 exit() は SystemExit を送出するので、 try ステートメントの finally 節に終了処理を記述したり、上位レベルで例外を捕捉して exit 処理を中断したりすることができます。

究極には、 exit() は例外を送出する “だけ” なので、これがメインスレッドから呼び出されたときは、プロセスを終了するだけで、例外は遮断されません。

つまり、sys.exit() が行っているのは例外 SystemExit の送出だけです。
従って、次の方法は sys.exit() とほぼ等価です。

raise 文ならば sys をインポートする必要がない為、こちらのほうが便利ではないかと思います。
また、関数中で早期 return を行うことで簡潔に終了できる場合は、そのほうが良いでしょう。

※ Python 3.9 で動作確認。

py コマンドで Python のバージョンを切り替える

Python 公式パッケージの Windows 版には、py.exe という Python のランチャーが付属しています。
py.exe を使うと異なるバージョンの Python を瞬時に切り替えて実行できるほか、いくつかの利点があります。
Python バージョンの切り替え方法を中心に、py.exe の機能を解説します。

py コマンドの特長

py.exe には次のような特長があります。

  • C:\Windows にインストールされる為、どこからでも py で実行できる。
  • python.exe と同じオプション、引数を指定できる。
  • オプション指定で実行する Python のバージョンを切り替えられる。
  • Python 3.x / Python 2.x 及び 64bit / 32bit 版の切り替えが可能。
  • 異なるマイナーバージョンの Python を並行して実行できる。
  • デフォルトの Python バージョンを設定可能。
  • python.exe にパスを通す必要がない。

異なるバージョンの Python をインストール

Python は特別なことをしなくても、通常のインストール方法で複数の異なるバージョンをインストールして同時に利用できます。
メジャーバージョンが異なる Python 3 と Python 2 だけでなく、Python 3.8 と Python 3.9 などの異なるマイナーバージョンを複数インストールできます。

公式パッケージのインストール方法については Python 3 のインストール (Windows 版) をご覧ください。

インストール済みバージョンの確認

Python の公式パッケージが 1つでもインストールされていれば、py コマンドを利用できます。
現在インストールされているバージョンとパスの一覧は py -0p で確認できます。

C:\> py -0p
Installed Pythons found by C:\WINDOWS\py.exe Launcher for Windows
 -3.9-64        C:\Python\Python39\python.exe
 -3.8-64        C:\Python\Python38\python.exe *

末尾に * が付いているバージョンが現在の py.exe のデフォルトです。

Python のバージョンを指定して実行

py.exe のオプション指定で簡単に Python のバージョンを切り替えて実行できます。

メジャーバージョンの切り替え

-3 または -2 オプションで、各メジャーバージョンの最新版を実行できます。

C:\> py -3
Python 3.9.0 (tags/v3.9.0:9cf6752, Oct  5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 

バージョン指定の有無に関わらず、続けて python.exe と同様のオプションやスクリプト名などを指定できます。

C:\> py -3 -m pip --version
pip 20.2.4 from C:\Python\Python39\lib\site-packages\pip (python 3.9)

マイナーバージョンの切り替え

-3.8 のように指定すると、特定のマイナーバージョンを選択して実行できます。

C:\> py -3.8
Python 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

また、-3.8-64-3.8-32 の形式で 64bit / 32bit 版を切り替えることもできます。

デフォルトのバージョンを選択

複数バージョンをインストール済みの環境で、py.exe をバージョン指定無しで実行すると、初期状態では最も新しいバージョンの Python が実行されます。

デフォルトで使うバージョンは設定により変更できます。
詳しくは py コマンドの規定 Python バージョンの設定方法 をご覧ください。

参考情報