Faire distutils recherchez numpy fichiers d'en-tête à la bonne place
Dans mon installation, numpy est arrayobject.h
est situé à …/site-packages/numpy/core/include/numpy/arrayobject.h
. J'ai écrit un trivial Cython script qui utilise numpy:
cimport numpy as np
def say_hello_to(name):
print("Hello %s!" % name)
J'ai aussi la suite de distutils setup.py
(copié à partir de la Cython guide de l'utilisateur):
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [Extension("hello", ["hello.pyx"])]
setup(
name = 'Hello world app',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules
)
Quand j'essaie de construire avec python setup.py build_ext --inplace
, Cython essaie de faire ce qui suit:
gcc -fno-strict-aliasing -Wno-long-double -no-cpp-precomp -mno-fused-madd \
-fno-common -dynamic -DNDEBUG -g -Os -Wall -Wstrict-prototypes -DMACOSX \
-I/usr/include/ffi -DENABLE_DTRACE -arch i386 -arch ppc -pipe \
-I/System/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5 \
-c hello.c -o build/temp.macosx-10.5-i386-2.5/hello.o
Prévisible, cela ne parvient pas à trouver arrayobject.h
. Comment puis-je faire distutils utiliser l'emplacement correct de numpy inclure des fichiers (sans faire l'utilisateur de définir $CFLAGS)?
Vous devez vous connecter pour publier un commentaire.
Utilisation
numpy.get_include()
:%%cython
de la magie dans un ipython notebook.. je me demande si il existe une solution facile pour que ainsinumpy
travail lié à la définition denumpy.get_include
ici.include_dirs
ligne à l'intérieur de laExtension
appel à l'obtenir pour fonctionner avec cython 0.24setup.py
inutile pour les installations à distance. Vous obtenez une erreur " ModuleNotFoundError: No module named 'numpy"pip install
merciLa réponse donnée par @vebjorn-ljosa est correct, mais il provoque des problèmes lorsqu'il est utilisé conjointement avec
install_requires=['numpy']
. Dans cette situation, votre setup.py doit import numpy, ce qui va provoquer une erreur si vous essayez depip install
votre projet sans courirpip install numpy
premier.Si votre projet dépend de numpy, et que vous voulez numpy pour être automatiquement installé dans une dépendance, vous devez définir include_dirs uniquement lorsque vos extensions sont effectivement en cours de construction. Vous pouvez le faire en sous-classement
build_ext
:Et vous pouvez utiliser une astuce similaire pour ajouter cython comme un automatiquement installé dépendance:
Remarque: ces méthodes fonctionnent uniquement avec
pip install .
. Ils ne fonctionnent pas pourpython setup.py install
oupython setup.py develop
que dans ces commandes provoquer des dépendances être installé après votre projet, plutôt qu'avant.Pour quiconque n'est pas à l'aide de Cython, une légère modification de la R_Beagrie de solution sans que la dépendance est si vous importez build_ext de distutils.commande.build_ext au lieu de Cython.