set2 және cy2 және f2py-ге байланысты пакеттерге арналған setup.py

Мен cython және f2py-ге байланысты бірнеше субмодулдармен python пакеті үшін setup.py сценарийін жасауды қалаймын. Setuptools және numpy.distutils пайдалануға тырыстым, бірақ әлі күнге дейін сәтсіз болды:

Setuptools пайдалану

I am able to compile my cython extensions (and create an installation for the rest of the package) Setuptools пайдалану. I have, however, been unable to figure out how to use setuptools to generate the f2py extension. After extensive searching, I only found rather old messages like this one that state that f2py modules must be compiled Numpy.distutils пайдалану.

Numpy.distutils пайдалану

I am able to compile my f2py extensions (and create an installation for the rest of the package) Numpy.distutils пайдалану. I have, however, been unable to figure out how to get numpy.distutils to compile my cython extensions as it always attempts to use pyrex to compile it (and I am using extensions specific to cython) recent. I have done a search to figure out how to get numpy.distutils for cython files and - at least as of a year ago - they recommend applying a monkey patch to numpy.distutils. It seems applying such a monkey patch also restricts the options that can be passed to Cython.

Менің сұрағым: f2py және cython екеуіне де байланысты пакеттерге арналған setup.py сценарийін жазудың ұсынылған жолы қандай? Numpy.distutils-ге арналған патч қолдануды шынымен де жалғастырудың жолы бар ма?

19

2 жауаптар

You can just call each separately in your setup.py as in
http://answerpot.com/showthread.php?601643-cython%20and%20f2py

# Cython extension
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

setup(
  ext_modules = [Extension( 'cext', ['cext.pyx'] )],
  cmdclass = {'build_ext': build_ext},
  script_args = ['build_ext', '--inplace'],
)

# Fortran extension
from numpy.distutils.core import setup, Extension
setup(
  ext_modules = [Extension( 'fext', ['fext.f90'] )],
)

Сіздің қоңырау контекст (олар бұл аттар кеңістігін деп санайды, сенімді емес)
ағымдағы объектінің кеңейтімі мен функциясына байланысты өзгеруі керек setup() - бұл.

Бірінші setup() шақыру, бұл distutils.extension.Extension
және distutils.core.setup ()

Екінші setup() шақыру, бұл numpy.distutils.core.Extension торабы және numpy.distutils.core.setup ()

4
қосылды
Өкінішке орай, answerpot.com сілтемесі енді жұмыс істемейді. Жауабыңызға рахмет! :-)
қосылды автор TheXMA, көзі

Бұл шындық емес екенін көрсетеді. setuptools және distutils екеуінде де (кем дегенде numpy нұсқасы) C, Cython және f2py кеңейтімдеріне ие болуы мүмкін. Жалғыз ескерту, f2py модульдерін құрастыру үшін setup және Extension функциялары үшін numpy.distutils әрқашан керек. Бірақ setuptools дегенді орнату үшін де қолдануға болады (мысалы, python setup.py develop арқылы әзірлеуші ​​нұсқасын орнату мүмкіндігін беріңіз).

Тек distutils пайдалану үшін келесі әрекеттерді қолдана аласыз:

from numpy.distutils.core import setup
from numpy.distutils.extension import Extension

setuptools пайдалану үшін оны distutils импорттау алдында импорттауыңыз керек:

import setuptools

Содан кейін қалған коды бірдей:

from numpy import get_include
from Cython.Build import cythonize

NAME = 'my_package'
NUMPY_INC = get_include()
extensions = [
    Extension(name=NAME + ".my_cython_ext", 
              include_dirs=[NUMPY_INC, "my_c_dir"]
              sources=["my_cython_ext.pyx", "my_c_dir/my_ext_c_file.c"]),
    Extension(name=NAME + ".my_f2py_ext", 
              sources=["my_f2py_ext.f"]),
]
extensions = cythonize(extensions)
setup(..., ext_modules=extensions)

Барлық басқа заттарыңызды setup() қоңырауына қоюыңыз керек. Жоғарыда айтылғандай, Cython көмегімен numpy-ді my_c_dir/ -де болатын сыртқы C-файлымен ( my_ext_c_file.c ) бірге қолданасыз деп болжаймын және < code> f2py модулі тек бір Fortran файлы. Қажет болған жағдайда реттеңіз.

2
қосылды