2017-07-02 4 views
0

回答hereを使用して、パッケージにcython拡張機能のビルドを追加しようとしました。現在、.pyxファイルから.cファイルを生成するコードをcython化しますが、パッケージをインポートしようとすると共有オブジェクト.soファイルは作成されず、モジュールの1つが共有オブジェクトファイルをインポートしようとしますそれを見つけることができません。共有オブジェクト(.so)ファイルを作成せずにpythonパッケージにcython拡張を構築しようとしています

私のsetup.pyファイルには、(これは少しカットダウンされる)ので、のようなものです:

from setuptools import setup 
from setuptools.extension import Extension 
import os 
import numpy 
from Cython.Build import cythonize 

mypackage_root_dir = os.path.dirname(__file__) 
with open(os.path.join(mypackage_root_dir, 'requirements.txt')) as requirements_file: 
    requirements = requirements_file.read().splitlines() 

extensions = [Extension(
    name="package.submodule.foo", 
    sources=["package/submodule/foo.pyx"], 
    include_dirs=[numpy.get_include()], 
    ) 
] 

setup(name='package', 
     version=0.1, 
     description='...', 
     author='my name', 
     author_email='my email', 
     url="...", 

     include_package_data=True, 
     packages=['package', 
       'package.submodule1', 
       'package.submodule2', 
       'package.submodule', # the one that uses the pyx file 
     ], 
     ext_modules = cythonize(extensions), 
     install_requires=requirements, 
) 

私は時に共有オブジェクトファイルを構築するためのsetup.pyファイルを得ることができることを、このように問題を解決するにはどうすればよいですpython setup.py installが実行されていますか?

+0

この 'setup'ファイルはどうやって呼びますか? – hpaulj

+0

と 'python setup.py install' – SomeRandomPhysicist

+0

私は' cython'の専門家ではありませんが、私のスクリプトには 'python setup.py build_ext --inplace'が必要です。これは、獣医のかなり標準的なスクリプトです。 – hpaulj

答えて

0

私の質問のコードは動作していましたが、パッケージをインポートしようとしたときに、ファイルを見つけることができなかったインストール場所のパッケージ/サブパッケージディレクトリ内に.soファイルを作成していました。しかし、私は手動でパッケージのルートインストールディレクトリの場所にファイルを移動したときに働いた。

したがって、共有オブジェクトファイルは、サブモジュールディレクトリではなくパッケージのルートディレクトリにある必要があります。

私はそうのような拡張定義を変更することによって、これを達成することができる午前:

extensions = [Extension(
     name="foo", 
     sources=["package/submodule/foo.pyx"], 
     include_dirs=[numpy.get_include()], 
     ) 
    ] 

これはルートでの.soファイルがインストールディレクトリを置きます。

しかし、なぜこの共有オブジェクトファイルが通常のpythonファイルの場合のようにサブパッケージディレクトリではなくパッケージのルートにある必要があるのか​​わかりません。

関連する問題