英語とPythonが話せないプログラマ志望の3歳から33歳の方を対象にした教材です。
英語の文法も、Pythonの文法を知らなくても、基本単語の意味と、コンパイルエラーになったときの治し方がわかればいいかなっていう乗りです。
単語の意味がわかればいいというものでないことはうすうすわかっています。
どういう場合にコンパイルエラーになり、どういう場合にコンパイルエラーにならず、なおかつどういう順番で書けば、期待した結果を得ることができるかをさぐって行こうと思います。
import
a product or service that is brought into one country from another
https://www.oxfordlearnersdictionaries.com/definition/english/import_1?q=import
ChatGPT
pythonの関数のライブラリソースはどこにありますか。
良い質問です!
Pythonの「関数」や「ライブラリ」のソースコードがどこにあるかは、
**「どの種類のライブラリか」**によって異なります。以下で体系的に説明します👇
🧩 1. Python標準ライブラリ(例:os, sys, math, json など)
📍場所
標準ライブラリのソースは、Pythonをインストールしたディレクトリの中にあります。
macOS / Linux の例:
/usr/lib/python3.x/
または
/usr/local/lib/python3.x/
Windows の例:
C:\Users<ユーザー名>\AppData\Local\Programs\Python\Python3x\Lib
ここに .py ファイル(例:os.py, json/decoder.py など)があり、
その中身が標準ライブラリのソースコードです。
📘例:
cd /usr/lib/python3.11/json
cat decoder.py
⚙️ 2. 組み込み(C言語で実装された)ライブラリ
例えば sys, math, _thread, time などは
Pythonの本体(CPython)にC言語で実装されています。
📍場所:
これらはPythonのビルド時にリンクされるため .py ファイルは存在せず、
CPythonのソースリポジトリにあります:
🔗 https://github.com/python/cpython
例:
math モジュール → Modules/mathmodule.c
sys モジュール → Python/sysmodule.c
builtins 関数群 → Python/bltinmodule.c
📦 3. 外部ライブラリ(例:numpy, pandas, requests など)
📍場所:
通常は site-packages フォルダにインストールされています。
確認コマンド:
python -m site
出力例:
sys.path = [
'/usr/local/lib/python3.11/site-packages',
]
ここに、各ライブラリのフォルダが存在します。
例:
/usr/local/lib/python3.11/site-packages/numpy/
💡pipでインストール済みのライブラリの場所確認:
pip show numpy
出力例:
Location: /usr/local/lib/python3.11/site-packages
🧠 4. 実行中の関数のソースを調べる(開発中のTips)
方法1:inspect モジュールを使う
import inspect
import json
print(inspect.getsource(json.dumps))
→ 該当関数のソースコードをその場で表示します(Pythonで書かれている場合のみ)。
方法2:file でファイルパスを調べる
import json
print(json.file)
出力例:
/usr/lib/python3.11/json/init.py
🔍 まとめ
種類 ソースの場所 備考
標準ライブラリ /usr/lib/python3.x/Lib/ .py ファイルあり
組み込みC拡張 GitHubのCPythonリポジトリ .c ファイル
外部ライブラリ site-packages フォルダ pip install先
実行中関数 inspect.getsource() ソースコードを直接表示可能
もしあなたが「特定の関数(例:print() や len())」などのソースを見たい場合、
その関数名を教えていただければ、どのファイルにあり、どう確認できるかを具体的に案内できます。
どの関数を見てみたいですか?
import
とても良い切り口です。
Pythonの import はよく使いますが、実は「関数」ではなく**言語構文(構文キーワード)**です。
つまり、def で定義された関数のように .py ファイル内のコードとして存在するわけではありません。
そのため、inspect.getsource(import) のようには扱えません。
🧩 import の正体
import は Python の 文法(syntax)レベルで定義されていて、
実際の処理は Python のC言語実装部分(CPython の内部)で行われています。
🧠 内部的な流れ
たとえば次のようなコードを実行したとき:
import math
Python の内部では以下のような流れになります👇
インポート構文を解析
Python の構文解析器(parser)が import 文を検出します。
importlib モジュールを呼び出す
実際のロード処理は Python 標準ライブラリの
importlib モジュールによって行われます。
import math は概ね以下と同等です:
import importlib
math = importlib.import_module("math")
モジュール検索
Python は sys.path に登録されたディレクトリを順番に探し、
該当するモジュールファイル(例:math.py または C拡張 .so / .pyd)を見つけます。
ロードとキャッシュ
モジュールをロードし、sys.modules にキャッシュします。
以降の import math はキャッシュを再利用するため高速です。
📘 参考ソース(実装場所)
import の実体は C言語で実装された CPython の一部です。
主に以下のファイルで定義されています:
処理内容 ファイル リポジトリ
インポート処理のコア Python/import.c github.com/python/cpython
Python側インターフェース Lib/importlib/init.py 同上
より詳細なローダ Lib/importlib/_bootstrap.py 同上
💡 Pythonでimportを追跡してみる
import importlib
help(importlib.import_module)
または、
import importlib.util
print(importlib.util.find_spec("math"))
これで、モジュールがどこからロードされているかを確認できます。
✅ まとめ
項目 内容
import は? Pythonの構文キーワードであり、関数ではない
実際の処理 importlib モジュールに委譲される
ソースコードの場所 Lib/importlib/_bootstrap.py, Python/import.c
確認コマンド help(importlib), importlib.util.find_spec()
もしよければ、「import の中でどうやって .py ファイルを探してロードするか(モジュール検索アルゴリズム)」の図解もお見せできますが、ご覧になりますか?
図はplantUMLでお願いします。
了解しました。
では、Pythonの import 文がモジュールをロードする流れを
PlantUML のシーケンス図で示します👇
🧠 この図が表していること
import 文は構文解析器によって importlib.import_module() に渡される。
importlib はまず sys.modules にキャッシュがあるかを確認。
なければ sys.path 上を探索してモジュールファイルを発見。
ロード後、sys.modules に登録して再利用可能にする。
もし希望があれば、このシーケンスを
「モジュール探索アルゴリズム」や「再帰インポートの処理」まで拡張したPlantUML版も作成できます。
次にそれを見たいですか?
はい。
了解しました。
では次に、「import の再帰的モジュール探索と依存関係のロード」を含めた
拡張版 PlantUML 図を示します👇
🧠 図の説明
このシーケンス図は以下の点を表しています:
importlib が main_module をロードする際、
そのモジュール内部にさらに import 文があれば、
再帰的に importlib.import_module() を呼び出して依存モジュールをロードします。
各モジュールはロード済みかどうかを
sys.modules(キャッシュ)で確認します。
キャッシュに存在しなければ、
sys.path → ファイルシステムを順に探索してロード。
ロードしたモジュールは sys.modules に登録し、
同一プロセス内で再利用されます。
💡補足:依存関係のループ(循環import)
もし A モジュールが B を、B が A をインポートするような
「循環import」が起きた場合、sys.modules に途中経過のモジュールが一時登録され、
未完全な状態のモジュールオブジェクトが返されます。
そのため、循環importはバグの温床になりやすいです。
ご希望があれば、次に
📦「循環importがどのように処理されるか」をPlantUMLで図解することもできます。
続けて描きましょうか?
はい。
素晴らしいです。
では、Pythonにおける 「循環 import(circular import)」 がどのように処理されるかを
PlantUML のシーケンス図で示します👇
🧠 図の説明
moduleA がロードされ、sys.modules["moduleA"] に「作成中のオブジェクト」が一時登録される。
その中で import moduleB が呼ばれると、同様に moduleB がロード開始。
ところが moduleB 内で再び import moduleA が呼ばれると、
Python はキャッシュに「作成中の moduleA」があるのを見つけて その未完成のオブジェクトを返す。
そのため、moduleB が moduleA の属性にアクセスしようとすると、
まだ初期化されていない変数や関数に触れてエラーになる可能性があります。
最後に両方のロードが完了し、sys.modules に最終的なオブジェクトが揃います。
⚠️ 注意点(循環importの落とし穴)
実行順序によっては、
AttributeError: partially initialized module 'A' has no attribute 'x'
のようなエラーが発生します。
解決策:
import 文を関数内や if 文の中に移動(遅延import)
構造を見直して依存方向を一方通行に設計する
またはインターフェースをまとめる「共通モジュール」を作る
もしご希望があれば、この循環importの動作を**Python実コード(実験可能な最小例)**として
Colab / Jupyter で動かせる形でもご紹介できます。
ご覧になりますか?
はい。
githyb
cpython
https://github.com/python/cpython
def
define
to say or explain what the meaning of a word or phrase is
https://www.oxfordlearnersdictionaries.com/definition/english/define?q=define
<この項は書きかけです。順次追記します。>
This article is not completed. I will add some words and/or centences in order.
Este artículo no está completo. Agregaré algunas palabras en orden.
Ref.
大規模言語モデル講座 基礎編 2025 Autumn 敗因を勝因に
https://qiita.com/kaizen_nagoya/items/34ffd2b0c47a5f3665d9
MCP入門 〜面倒なことはAIエージェントにやらせよう〜 by からあげ を聞きながら
https://qiita.com/kaizen_nagoya/items/54b648c838fae8d57e38
MCP入門 〜面倒なことはAIエージェントにやらせよう〜 by からあげ を聞きながら、補足と反論 by ChatGPT
https://qiita.com/kaizen_nagoya/items/0939d58d31666562090c
C言語を習得する3つの方法
https://qiita.com/kaizen_nagoya/items/84cab0888c193bba429b
Views上位64記事 20250617現在
https://qiita.com/kaizen_nagoya/items/26dbbd04cf18b7742972
C言語(C++)が必要な人、必要ない人 with ChatGPT
https://qiita.com/kaizen_nagoya/items/a074cb8cd292d8d94bd4
C言語を習得する3つの方法 with ChatGPT
https://qiita.com/kaizen_nagoya/items/4a3518a18fa49f46787f
<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>
This article is an individual impression based on my individual experience. It has nothing to do with the organization or business to which I currently belong.
Este artículo es una impresión personal basada en mi experiencia personal. No tiene nada que ver con la organización o empresa a la que pertenezco actualmente.
文書履歴(document history)
ver. 0.01 初稿 20250618
最後までおよみいただきありがとうございました。
いいね 💚、フォローをお願いします。
Thank you very much for reading to the last sentence.
Please press the like icon 💚 and follow me for your happy life.
Muchas gracias por leer hasta la última oración.
Por favor, haz clic en el ícono Me gusta 💚 y sígueme para tener una vida feliz.