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

Pythonに関するファイルの拡張子、多過ぎるんだが...

news.yahoo.co.jp

⇧ ルール改定したところで、旧ルールに慣れ親しんだ人たちに新ルールを定着させるのは難しい気がしますけど...

70年近く、対応してこなかったのに、何故に今になってルール改定するのか...

Pythonに関するファイルの拡張子、多過ぎるんだが...

何か、セミナーで利用したツールのファイル構成を確認していたら、拡張子が「.pyd」なるファイルを見つけて、ネットで調べた感じでは、

docs.python.org

Is a *.pyd file the same as a DLL?

Yes, .pyd files are dll’s, but there are a few differences. If you have a DLL named foo.pyd, then it must have a function PyInit_foo(). You can then write Python “import foo”, and Python will search for foo.pyd (as well as foo.py, foo.pyc) and if it finds it, will attempt to call PyInit_foo() to initialize it. You do not link your .exe with foo.lib, as that would cause Windows to require the DLL to be present.

https://docs.python.org/3/faq/windows.html

Note that the search path for foo.pyd is PYTHONPATH, not the same as the path that Windows uses to search for foo.dll. Also, foo.pyd need not be present to run your program, whereas if you linked your program with a dll, the dll is required. Of course, foo.pyd is required if you want to say import foo. In a DLL, linkage is declared in the source code with __declspec(dllexport). In a .pyd, linkage is defined in a list of available functions.

https://docs.python.org/3/faq/windows.html

docs.python.org

4. C および C++ 拡張のビルド

CPython の C 拡張は 初期化関数 をエクスポートした共有ライブラリ (例、 Linux の .so ファイルや Windows の .pyd ファイル) です。

https://docs.python.org/ja/3.10/extending/building.html

⇧ う~む、よく分からん...

統合開発環境IDE:Integrated Development Environment)」の1つである「Visual Studio」のドキュメントで、

learn.microsoft.com

PythonC++ 拡張機能の作成

一般的に、Python インタープリターの機能を拡張するために、C++ (または C) で記述されたモジュールが使われます。 また、低レベルのオペレーティング システム機能へのアクセスを有効にするためにも使用できます。

https://learn.microsoft.com/ja-jp/visualstudio/python/working-with-c-cpp-python-in-visual-studio?view=vs-2022

モジュールには次の 3 つの主な種類があります。

  • アクセラレータ モジュール: Pythonインタープリター言語であるため、C++アクセラレータ モジュールを記述してパフォーマンスを向上させることができます。
  • ラッパー モジュール: これらのモジュールでは、既存の C/C++ インターフェイスPython コードに公開するか、Python から使いやすい、より "Python らしい" API を公開します。
  • 低レベル システム アクセス モジュール: これらのモジュールを作成し、CPython ランタイム、オペレーティング システム、または基になるハードウェアの低レベル機能にアクセスできます。

https://learn.microsoft.com/ja-jp/visualstudio/python/working-with-c-cpp-python-in-visual-studio?view=vs-2022

インポート エラーのトラブルシューティングを行う

モジュールをインポートしようとしたときに ImportError メッセージを受け取った場合は、次のいずれかの方法で解決できます。

  • プロジェクト参照を使用してビルドする場合は、C++ プロジェクトのプロパティが、Python プロジェクトでアクティブになっている Python 環境と確実に一致するようにします (特に Include および Library ディレクトリ)。

  • 出力ファイルには、必ず superfastcode.pyd という名前を付けます。 他の名前や拡張子を使用すると、インポートできなくなります。

  • setup.py ファイルを使用してモジュールをインストールした場合は、Python プロジェクト用にアクティブ化された Python 環境で確実に pip コマンドを実行したことを確認します。 ソリューション エクスプローラーで Python 環境を展開すると、superfastcode のエントリが表示されるはずです。

https://learn.microsoft.com/ja-jp/visualstudio/python/working-with-c-cpp-python-in-visual-studio?view=vs-2022

この記事では、PythonC++ 拡張機能を使用できるようにする 2 つの方法も示します。

  • Python のドキュメントで説明されている標準の CPython 拡張機能を使用する。
  • その簡潔さから C++ 11 に推奨される PyBind11 を使用する。 互換性を確保するために、Python の最近のバージョンのいずれかを使用していることを確認してください。

このチュートリアルのサンプルの完全版は、GitHub の python-samples-vs-cpp-extension にあります。

https://learn.microsoft.com/ja-jp/visualstudio/python/working-with-c-cpp-python-in-visual-studio?view=vs-2022

⇧ とあるので、C++で記述した処理をPythonで利用できるようにするために、ビルドされたファイルということになるんだろうか?

github.com

C++の機能をPythonで使えるようにしてくれるっぽいですな。

ツールを構成しているファイルに「Microsoft.CSharp.dll」とかもあったので、基本的に画面側はC#で作られていて、処理的な部分は、Pythonが担っているってことなんかな。

何やら、「.pyd」ファイル以外にも、

kaworu.jpn.org

⇧ 拡張子の種類が多い...

う~む、黒魔術感が半端ない...

何やら、CPythonの他にもいろいろあるらしいのですが、

qiita.com

⇧Python3系に対応していくために費やすコストが重そう...

とりあえず、Pythonで他のプログラミング言語で記述した処理を利用しようとすると管理が煩雑になるってことなんかな。

ファイルの拡張子毎に、対応方法が変わってくると、辛いですな...

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

今回はこのへんで。