タグ付けされた質問 「cython」

12
PythonでのCライブラリのラッピング:C、Cythonまたはctypes?
PythonアプリケーションからCライブラリを呼び出したいのですが。API全体をラップするのではなく、自分のケースに関連する関数とデータ型のみをラップします。それを見ると、私は3つの選択肢があります。 Cで実際の拡張モジュールを作成します。おそらくやり過ぎです。また、拡張の記述を学習するオーバーヘッドを回避したいと思います。 Cythonを使用して、CライブラリからPythonに関連パーツを公開します。 Pythonですべてをctypes行い、外部ライブラリとの通信に使用します。 2)と3)のどちらが良い選択かわかりません。3)の利点は、それctypesが標準ライブラリの一部であり、結果のコードが純粋なPythonになることです。ただし、その利点が実際にどれほど大きいかはわかりません。 どちらを選択しても、長所/短所はありますか?どちらのアプローチをお勧めしますか? 編集:すべての回答に感謝します。同様のことをしたいと考えているすべての人に役立つリソースを提供します。もちろん、決定はまだ1つのケースに対して行われることになっています。「これは正しいことです」という種類の答えはありません。私自身のケースでは、おそらくctypesを使用しますが、他のプロジェクトでCythonを試すことも楽しみにしています。 正解は1つではないため、1つを受け入れることはいくぶん恣意的です。私はFogleBirdの回答を選択しました。これはctypesに対するいくつかの優れた洞察を提供し、現在、最も投票された回答でもあるからです。ただし、概要を理解するためにすべての回答を読むことをお勧めします。 再度、感謝します。
284 python  c  ctypes  cython 

6
Cython:「致命的なエラー:numpy / arrayobject.h:そのようなファイルまたはディレクトリはありません」
Cythonを使用して、ここで答えを高速化しようとしています。(ここでcygwinccompiler.py説明したハックを実行した後)コードをコンパイルしようとすると、エラーが発生します。それが私のコードの問題なのか、それともCythonの難解な微妙な問題なのか、誰か教えてもらえますか?fatal error: numpy/arrayobject.h: No such file or directory...compilation terminated 以下は私のコードです。 import numpy as np import scipy as sp cimport numpy as np cimport cython cdef inline np.ndarray[np.int, ndim=1] fbincount(np.ndarray[np.int_t, ndim=1] x): cdef int m = np.amax(x)+1 cdef int n = x.size cdef unsigned int i cdef np.ndarray[np.int_t, ndim=1] c = …

10
Cythonコードを含むPythonパッケージをどのように構成すればよいですか
Cythonコードを含むPythonパッケージを作成したいのですが。Cythonコードが適切に機能しています。しかし、私はそれをどのようにパッケージ化するのが最善かを知りたいです。 パッケージをインストールしたいほとんどの人のために、.cCythonが作成したファイルを含め、それsetup.pyをコンパイルしてモジュールを生成するように手配したいと思います。その場合、ユーザーはパッケージをインストールするためにCythonをインストールする必要はありません。 しかし、パッケージを変更したい人のために、Cython .pyxファイルも提供し、Cython setup.pyを使用してそれらをビルドできるようにします(そのため、これらのユーザーは Cythonをインストールする必要があります)。 これらの両方のシナリオに対応するには、パッケージ内のファイルをどのように構成すればよいですか? Cythonのドキュメントには、小さなガイダンスが記載されています。しかし、setup.pyCythonの有無の両方のケースを処理するシングルをどのように作成するかについては触れていません。
122 python  packaging  cython 

4
cythonとmingwでコンパイルするとgccが生成される:エラー:認識されないコマンドラインオプション '-mno-cygwin'
私はmingw(64ビット)を使用して、Windows 7 64ビットのcythonでpython拡張機能をコンパイルしようとしています。 私はPython 2.6(Active Python 2.6.6)と適切なdistutils.cfgファイル(mingwをコンパイラーとして設定)で作業しています 実行時 > C:\Python26\programas\Cython>python setup.py build_ext --inplace gccに-mno-cygwinオプションがないというエラーが表示されます。 > C:\Python26\programas\Cython>python setup.py build_ext --inplace running build_ext skipping 'hello2.c' Cython extension (up-to-date) building 'hello2' extension C:\mingw\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\Python26\include -IC:\Python26\PC -c hello2.c -o build\temp.win-amd64-2.6\Release\hello2.o gcc: error: unrecognized command line option '-mno-cygwin' error: command 'gcc' …

4
Cythonを使用してメインのPythonプログラムをコンパイルする
Cythonを使用して.soファイルにコンパイルされたPythonモジュールをロードできるPython2.6プログラムがあります。Cythonを使用して.pyモジュールを.soファイルにコンパイルしましたが、すべて正常に動作します。 これは私がCythonで使用するsetup.pyファイルです: from distutils.core import setup from distutils.extension import Extension from Cython.Distutils import build_ext ext_modules = [ Extension("ldap", ["ldap.pyx"]), Extension("checker", ["checker.pyx"]), Extension("finder", ["finder.pyx"]), Extension("utils", ["utils.pyx"]), ] setup( name = 'bchecker', cmdclass = {'build_ext': build_ext}, ext_modules = ext_modules ) したがって、Cythonを使用してPythonモジュールをコンパイルできることはわかっています(CythonはPythonファイルから「C」ファイルを作成してからコンパイルします)が、メインのPythonプログラムをLinuxプラットフォームで実行できるものにコンパイルできますか?もしそうなら、Cythonコマンドラインの例をいただければ幸いです。ありがとう。
81 python  cython 

1
tar.gzのpipインストールで「Cython」という名前のモジュールはありません
Poetryを使用して、サンプルパッケージ(https://github.com/iamishalkin/cyrtd)のtar.gzおよびwhlファイルをビルドし、pipenv環境内にパッケージをインストールしようとします。tar.gzのインストールは失敗し、これはログの一部です。 $ poetry build ... $ pip install dist/cyrtd-0.1.0.tar.gz Processing c:\work2\cyrtd\dist\cyrtd-0.1.0.tar.gz Installing build dependencies ... done Getting requirements to build wheel ... done Preparing wheel metadata ... done Requirement already satisfied: cython<0.30.0,>=0.29.13 in c:\users\ivan.mishalkin\.virtualenvs\cyrtd-tpdvsw8x\lib\site-packages (from cyrtd==0.1.0) (0.29.15) Building wheels for collected packages: cyrtd Building wheel for cyrtd (PEP 517) ... …

2
Cythonは、0.5に評価する必要がある式に対して0を返しますか?
何らかの理由で、Cythonは、0.5に評価されるはずの数式で0を返します。 print(2 ** (-1)) # prints 0 奇妙なことに、変数を混ぜると、期待どおりに機能します。 i = 1 print(2 ** (-i)) # prints 0.5 Vanilla CPythonはどちらの場合も0.5を返します。私はのため37m-x86_64-linux-gnuにコンパイルしlanguage_levelてい3ますが、に設定されています。 この魔術は何ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.