1

Python モジュールと Python フレームワークの「lib-dnyload」ディレクトリ内のコードを見て、コードがある種の GUI やグラフィックを作成するたびに、.so 拡張子を持つ非 Python ファイルをインポートすることに気付きました。そして、「lib-dnyload」には大量の .so ファイルがあります。

グーグルで調べた結果、これらのファイルは共有オブジェクトと呼ばれ、C または C++ で記述されていることがわかりました。私は Mac を持っていて、GCC を使用しています。Python 経由でアクセスできる共有オブジェクト ファイルを作成するにはどうすればよいですか? 主に、Mac OS X を使用して GCC で共有オブジェクトを作成する方法だけです。

4

5 に答える 5

4

公式の python ドキュメントは、簡単な例から始まります。始めるには十分です。

于 2010-04-09T19:54:24.607 に答える
2

私の意見では、最も簡単な方法はCythonを使用することです。Cython はいくつかの C コードを生成し、それをコンパイルして、Python からロードできる ".so" ライブラリを作成します。これは簡単で無痛です。チュートリアルに従うことをお勧めします。そうすれば、すぐにライブラリが完成するはずです。

Python の C 拡張機能の背後にあるすべての詳細を知りたい場合は、C 拡張機能に関する Python ドキュメントに飛び込む必要があります。

于 2010-04-09T19:54:32.347 に答える
2

Python で C 拡張モジュールをビルドしてインストールする標準的な方法は、標準の Python ライブラリに含まれているDistutilsの機能を使用することです。setup.py通常、これは C ファイルをプロジェクト ディレクトリに含め、 C ソース ファイルを識別するために、通常は と呼ばれる構成ファイルを作成することを意味します。setup.pyPython で適切に構成されたファイルを実行するDistutilsと、システムの C コンパイラとリンカーを使用して C ソース ファイルのコンパイルとリンクが処理されます。Xcode(OS X では、のバージョンをインストールする Apple の無料の開発者ツールをインストールしておく必要がありますgcc。) Distutils のすべてのドキュメントを調べて、何をすべきかを理解するのは、現時点では圧倒される可能性があります。ここに簡単なチュートリアルがありますそれはあなたが始めるのに十分なはずです。

setup.py自分で gcc を呼び出すのではなく、Distutils を使用するのはなぜですか? いくつかの理由:

  1. C 拡張機能は通常、Python インタープリター自体のコンテキスト内で実行されるため、拡張機能をコンパイルし、インタープリターの C コードと互換性のある方法でリンクすることが重要です。Distutils は、実行中の Python に適切なオプションを提供することで、当て推量を排除しようとします。これは、マルチアーキテクチャ実行可能ファイルのさまざまな組み合わせ (つまり-arch i386、OS X 10.4 から 10.6 まで)。-arch ppc-arch x86_64-arch ppc64

  2. Distutils を使用すると、マシンやオペレーティング システムに依存しない方法で、純粋な Python と C 拡張モジュールの組み合わせをパッケージ化して配布できます。多くの場合、オペレーティング システムに依存するシステム コールなどを回避するように C コードが記述されている場合、C 拡張機能をビルドして最新の Python プラットフォームにインストールできます。変更を加えたり、使用する C コンパイラやオプションを知らなくてもかまいません。設定。

  3. C コードを使用した最新の Python サードパーティ パッケージのほとんどすべてがこの方法で動作することがわかるため、最初から Distutils を使用する習慣を身につけるとよいでしょう。

  4. チュートリアルでわかるように、setup.py多くの場合にファイルをセットアップするのは非常に簡単です。

于 2010-04-10T05:14:19.600 に答える
0

これにはさまざまな方法があります。

  • Python.hコードでヘッダーを使用Cします。これにより、最速のコードが生成されます。
  • SWIGなどの Python ヘッダーの周りにラッパーを使用します。コードは少し遅くなる可能性がありますが、C/C++ ソース コードを変更する必要はありません。ほとんどの場合、SWIG インターフェイス ファイルを記述するだけでよく、共有オブジェクトは Python/PHP/Java などと統合されています。C/C++ コードのラップを開始するには、これが最も簡単な方法です。
  • Python 言語に精通していて、C/C++ スタイルで SWIG インターフェース ファイルを作成することを避けたい場合 は、 Cythonが最適なラッパーです。
于 2010-04-10T06:14:43.520 に答える
0

Python 拡張機能は、Cython、SWIG、boost.python など、さまざまな方法で作成できます。共有ライブラリを作成し、「ctypes」ライブラリを使用してアクセスすることもできます。

于 2010-04-09T23:58:32.107 に答える