CまたはCython拡張

AstropyはC拡張を用いてCライブラリを実装し,Cythonを用いて計算集約型計算を加速することをサポートしている.CythonもC拡張構築もご利用いただけます get_extensions 機能しています setup_package.py ファイルです。この関数が定義されていれば,その関数は返さなければならない. setuptools.Extension 物体です。作成プロセスは、サブパッケージ設計者に残され、カスタマイズすることができるが、サブパッケージ内の拡張に関連する。

C拡張は常に通過しなければなりません get_extensions Cythonファイルの仕組みです .pyx )は、以下のように自動的に配置されます。 extension-helpers 別の拡張にロードします get_extensions それがそうです。このように配置されたCython拡張の場合、Numpy C関数のヘッダは構築に含まれるが、他の外部ヘッダは含まれない。 .pyx 返された拡張子に存在するファイル get_extensions 自動生成された拡張リストには含まれていない.

注釈

もし1つが setuptools.Extension 属性はCythonソースファイルに提供されます。 get_extensions メカニズムというのは非常に重要です .pyx 書類として source そうではありません .c Cythonが生成したファイル.

Numpy Cヘッダの使用

CやCythonを拡張して使用すれば numpy Cレベルでは、Numpy Cヘッダファイルにアクセスする必要があるかもしれません。この操作を実行する際には、使用すべきです numpy.get_include() 使用する包含ディレクトリを指定するには、例えば、:

from setuptools import Extension
import numpy

def get_extensions():
    return Extension(name='myextension', sources=['myext.c'],
                     include_dirs=[numpy.get_include()])

Cヘッドファイルのインストール

C拡張に他の第三者Cコードからリンクする必要がある場合、そのヘッダファイルをPythonモジュールと一緒にインストールしたい場合があります。

  1. 1つを作ることができます include バッグの中のすべてのヘッダファイルのディレクトリです。

  2. 使用 [options.package_data] 部分はあなたのです setup.cfg ファイルはこれらのヘッダファイルをカバンに含める。例えば astropy.wcs パッケージには以下の項目が含まれています [options.package_data] 部分::

    [options.package_data]
    ...
    astropy.wcs = include/*/*.h
    ...
    

生成時の導入を防ぐ

重要なのは setup_package.py ファイルは,それらが存在するパケットの導入をトリガしない-したがって,パケットに導入された他の部分に依存することなく実行できるはずである.

Cacheを用いて構築速度を速める

ccache コンパイルされたソースコードをキャッシュするツールであるため,出力が削除されても,それらを再コンパイルする必要はない(変更されていない限り).これは、分岐を切り替えたり、ソースコード署名をクリアしたりすると、大部分の再コンパイルが最初から始まることを回避し、大量の時間を節約できることを意味します。

Cacheのインストールと構成はプラットフォームによって異なるので、cacheドキュメントおよび/またはGoogleを参照して、Astropyや科学プログラミングの大きな開発を行っている人には、ccacheを設定してください。