Warum funktioniert setup_requires für numpy nicht richtig?
Ich wollte eine erstellensetup.py
Datei, die automatisch eine Abhängigkeit der Erstellungszeit von numpy auflöst (zum Kompilieren von Erweiterungen). Meine erste Vermutung war zu verwendensetup_requires
und Unterklassen einer Befehlsklasse zum Importieren des Numpy-Moduls:
from setuptools import setup, Extension
from distutils.command.build import build as _build
class build(_build):
def run(self):
import numpy
print(numpy.get_include())
_build.run(self)
setup(
name='test',
version='0.0',
description='something',
cmdclass={'build':build},
setup_requires=['numpy'],
)
Jetzt rennpython setup.py build
kompiliert numpy erfolgreich, schlägt dann aber fehl (insidebuild.run
) mit:
AttributeError: 'module' object has no attribute 'get_include'
Wenn jedoch derselbe Befehl erneut ausgeführt wird, ist der Befehl jetzt erfolgreich (und muss numpy nicht neu kompiliert werden).
Ich habe dies auf Python {2.6,2.7,3.3} mit und ohne virtualenv auf ziemlich neuen Versionen von setuptools getestet.
Ich habe einen gesehenProblemumgehung mit pkg_resources.resource_filename was gut zu funktionieren scheint, wenn wir nur das include-Verzeichnis wollen.BEARBEITEN: funktioniert nur auf python2!
Trotzdem bin ich jetzt neugierig. Welche Vorbehalte hat die Verwendung vonsetup_requires
haben? Was könnte die Ursache dafür sein, dass es bei Numpy nicht richtig funktioniert? Für einige einfachere Module scheint es keine Probleme zu geben.