※当サイトの記事には、広告・プロモーションが含まれます。

Pythonの「__pycache__」ディレクトリについて

codezine.jp

 米Microsoftは、コードエディタ「Visual Studio Code」の、Python/Jupyter向け拡張機能の2024年8月版を、7月31日(現地時間)に公開した。

Microsoft、「Visual Studio Code」のPython/Jupyter向け拡張機能の2024年8月版を公開|CodeZine(コードジン)

 そして、デバッグ中に変数の値をエディター画面に表示する機能も加わった。この機能を利用することで、専用の画面を開いたり、変数を表示している部分にマウスポインタを当てたりすることなく、変数の値を確認できる。利用するには、設定ファイル「settings.json」を開き、"debugpy.showPythonInlineValues"の項目をtrueに変更する必要がある。

Microsoft、「Visual Studio Code」のPython/Jupyter向け拡張機能の2024年8月版を公開|CodeZine(コードジン)

⇧ う~む、「VS CodeVisual Studio Code)」のどのバージョンで導入された機能なのかサッパリ分からん...

元ネタのMicrosoftの周知ブログを確認したところ、

devblogs.microsoft.com

⇧ 何やら「拡張機能」をインストールする必要があるってことらしいですね...

github.com

⇧ 対象の「拡張機能」が分かり辛い...

とりあえず、「VS CodeVisual Studio Code)」のバージョンをアップデートして、

再起動したところ、

{
  // ...省略
  "debugpy.showPythonInlineValues": true
  // ...省略
}


⇧「.vscode/settings.json」に追記して有効になったので、「VS CodeVisual Studio Code)」の「拡張機能」としては「Python Debugger」というもので良さそうな気がする。

Pythonの「__pycache__」ディレクトリについて

Pythonの公式のドキュメントによると、

docs.python.org

6.1.3. "コンパイル" された Python ファイル

モジュールの読み込みを高速化するため、Pythonコンパイル済みの各モジュールを __pycache__ ディレクトリの module.version.pyc ファイルとしてキャッシュします。

https://docs.python.org/ja/3/tutorial/modules.html

Python はソースの変更日時をコンパイル済みのものと比較し、コンパイル済みのものが最新でなくなり再コンパイルが必要になっていないかを確認します。これは完全に自動で処理されます。また、コンパイル済みモジュールはプラットフォーム非依存なため、アーキテクチャの異なるシステム間で同一のライブラリを共有することもできます。

https://docs.python.org/ja/3/tutorial/modules.html

Python は2つの場合にキャッシュのチェックを行いません。

https://docs.python.org/ja/3/tutorial/modules.html

ひとつは、コマンドラインから直接モジュールが読み込まれた場合で、常に再コンパイルされ、結果を保存することはありません。

https://docs.python.org/ja/3/tutorial/modules.html

2つめは、ソース・モジュールのない場合で、キャッシュの確認を行いません。ソースのない (コンパイル済みのもののみの) 配布をサポートするには、コンパイル済みモジュールはソース・ディレクトリになくてはならず、ソース・ディレクトリにソース・モジュールがあってはいけません。

https://docs.python.org/ja/3/tutorial/modules.html

⇧とのこと。

で、「__pycache__」ディレクトリですが、

www.kimoton.com

要点をまとめると。

  • ファイルをインポートした際にできる
  • python compiled(.pyc)ファイルが入ってる。pythonコンパイルされたバイナリファイル。
  • 役割としては、インポート時の読み込みを早くする。消しても問題ない。
  • python3.2以降で__pycache__ディレクトリに入るようになった。それまでは実行ディレクトリ直下に.pycファイルが作成されていた。

__pycache__、 .pyc の役割 - ばいばいバイオ

⇧ 上記サイト様によりますと、Python 3.2で導入されたとのこと。

キャッシュを作成しないようにもできるようで、

PYTHONDONTWRITEBYTECODE環境変数でキャッシュを作成するか否かを制御できる。
作成したくない場合1にしときましょう。

参考:1. コマンドラインと環境 — Python 3.8.2 ドキュメント 

__pycache__、 .pyc の役割 - ばいばいバイオ

環境変数「PYTHONDONTWRITEBYTECODE」の値で制御できるらしい。

ちなみに、自分の環境(venvによるPython仮想環境)では、環境変数「PYTHONDONTWRITEBYTECODE」自体が無かったのですが、「__pycache__」ディレクトリが作成されたので、デフォルトではキャッシュが作成される設定のようですね。

後は、

anton0825.hatenablog.com

⇧「__pycache__」ディレクトリの出力先を変更できるそうな。

Pythonの「__pycache__」ディレクトリが不具合を起こすリスクは無いのか?

Pythonの仕組みで良しなに生成してくれてる「__pycache__」ですが、何か不具合を誘発するリスクは無いのか?

ちなみに、

itc.tokyo

⇧ 上記サイト様によりますと、Pythonでは「__pycache__」ディレクトリ以外にも、様々な「キャッシュ(chache)」が利用できる模様。

話が脱線しましたが、

note.com

⇧ 上記サイト様によりますと、Dockerコンテナのような環境で「__pycache__」が悪影響を及ぼすことがあるそうな。

権限周りが原因と思われるので、「__pycache__」が悪いわけでは無い気がするんだけど...

ただ、

qiita.com

qiita.com

zenn.dev

⇧ Gitでの管理対象からは「__pycache__」を除外するのが一般的っぽいですね。

VS CodeVisual Studio Code)上で非表示にしておくのが良いか?

で、「VS CodeVisual Studio Code)」の「.vscode/settings.json」に設定を追加することで、「VS CodeVisual Studio Code)」上の左サイドバーの1つ「Explorer」で、「__pycache__」ディレクトリなどを非表示にできるらしい。

stackoverflow.com

Python関連以外のディレクトリ、ファイルも非表示にできるそうな。

というわけで、「.vscode/settings.json」に設定を追加してみました。

■C:\Users\Toshinobu\Desktop\soft_work\python_work\fastapi\.vscode\settings.json

/**
* VS Code(Visual Studio Code)の仕様で、
*  ・「settings.json」
*  ・「tasks.json」
*  ・「launch.json」
* の3つのJSONファイルには「コメントアウト」が利用できるらしい。
* https://code.visualstudio.com/docs/languages/json#_json-with-comments
*/
// In addition to the default JSON mode following the JSON specification, 
// VS Code also has a JSON with Comments (jsonc) mode. 
// This mode is used for the VS Code configuration files such as 
// ・settings.json, 
// ・tasks.json, 
// or 
// ・launch.json. 
// When in the JSON with Comments mode, you can use 
// ・single line (//) 
// as well as 
// ・block comments (/* */) 
// as used in JavaScript. 
// The mode also accepts trailing commas, but they are discouraged and the editor will display a warning.
// 
// The current editor mode is indicated in the editor's Status Bar. 
// Select the mode indicator to change the mode and to configure how file extensions are associated to modes. 
// You can also directly modify the files.associations setting to associate file names or file name patterns to jsonc.

{
    "python.analysis.extraPaths" : [
        // "${workspaceFolder}"
        // ,"${workspaceFolder}/app"
        // ,"${workspaceFolder}/app/src"
        // ,"${workspaceFolder}/app/src/controller"
        // ,"${workspaceFolder}/app/src/entity"
        // ,"${workspaceFolder}/app/src/repository"
        // ,"${workspaceFolder}/app/src/service"
    ],
    // 【Windowsの設定】VS Code(Visual Studio Code)上で、環境模様「PYTHONPATH」に追加
    "terminal.integrated.env.windows": {
        "PYTHONPATH": "${workspaceFolder};${workspaceFolder}/app"
    },
    // 【Linuxの設定】VS Code(Visual Studio Code)上で、環境模様「PYTHONPATH」に追加
    "terminal.integrated.env.linux": {
        "PYTHONPATH": "${workspaceFolder}:${workspaceFolder}/app"
    },
    // VS Code(Visual Studio Code)上で、.envファイルを認識させる
    "python.envFile": "${workspaceFolder}/.env",
    // VS Code(Visual Studio Code)上のExplorerで非表示にしたいファイル、フォルダ
    "files.exclude": {
        "**/*.pyc": {"when": "$(basename).py"}, 
        "**/__pycache__": true,
    },
    // pytestの設定
    "python.testing.unittestEnabled": false,
    "python.testing.pytestEnabled": true,
    "python.testing.pytestArgs": [
        "--cov=."
        ,"--cov-report"
        ,"xml"
        ,"--capture=no"
    ],
    "coverage-gutters.showGutterCoverage": false,
    "coverage-gutters.showLineCoverage": true
}

⇧ という感じで、保存。

そうすると、「VS CodeVisual Studio Code)」上の「Explorer」では、「__pycache__」ディレクトリなどが非表示になりました。

VS CodeVisual Studio Code)」以外では、表示されたまま。

ちなみに、

qiita.com

news.mynavi.jp

⇧ 上記サイト様にありますように、本来、「JSON」ファイルで「コメントアウト」は使えません。

JSON」ファイルで「コメントアウト」を使えるようにしたい場合は、

github.com

Scanner and parser for JSON with comments.

https://github.com/microsoft/node-jsonc-parser

⇧ 公開されているライブラリをインストールしたりとかするしかないっぽいですな...

何やら、

blog.syum.ai

tsconfig.jsonには、コメントが書けます。

tsconfig.jsonはJSONじゃないと言う話 - 焼売飯店

ところが、試してみたところJSON5なら使えるはずの豊富な文法が全然使えなかったり、JSONとJSON5にかけていたformatOnSaveの設定が効かなかったので、違うということに気付きました。

tsconfig.jsonはJSONじゃないと言う話 - 焼売飯店

⇧ という感じで、「JSON5」なるものもあり、互換性が無いと...

JSON」ファイルで「コメントアウト」できるのをデフォルトにしておいて欲しかったんだが、「JSON」に対する「RFC(Request for Comments)」とか出て来なかったんかね?

ネットの情報によると、

www.publickey1.jp

RESTful APIのデータフォーマットなどで広く使われているJSONIETFJSON仕様「RFC 8259」を発表。従来の仕様をブラッシュアップしつつECMAの仕様との統一も実現した、事実上最後のJSON仕様になると見られる。

事実上最後のJSON仕様「RFC 8259」と「ECMA-404 2nd Editon」公開。UTF-8エンコード必須に - Publickey

⇧ とあり、2017年時点で、「JSON」に対する「RFC(Request for Comments)」が打ち止めの模様...

コメントアウト」を記載できるのを標準にしてくれた方が良いと思うんだけどな...

話が脱線しましたが、Pythonのお作法、いろいろ覚えていかねばですが、「VS CodeVisual Studio Code)」のPython向けの設定とかも把握していく必要があるのが辛いですね...

プログラミングの処理の部分以外の余計なことにリソースを使いたくないんだけど、開発環境周りで時間取られることが多過ぎるのと、不毛な時間を浪費させられる徒労感とで疲弊が甚だしいんだが...

毎度モヤモヤ感が半端ない…

今回はこのへんで。