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.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage