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つを作ることができます
include
バッグの中のすべてのヘッダファイルのディレクトリです。使用
[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を設定してください。