setup_requires mit Cython?
Ich bin erstellen einer setup.py
- Datei für ein Projekt mit einigen Cython extension Module.
Hab ich schon bekommen, das funktioniert:
from setuptools import setup, Extension
from Cython.Build import cythonize
setup(
name=...,
...,
ext_modules=cythonize([ ... ]),
)
Diese installiert in Ordnung. Das setzt jedoch Cython ist installiert. Was ist, wenn es nicht installiert ist? Ich verstehe, das ist, was die setup_requires
parameter für:
from setuptools import setup, Extension
from Cython.Build import cythonize
setup(
name=...,
...,
setup_requires=['Cython'],
...,
ext_modules=cythonize([ ... ]),
)
Jedoch, wenn Cython nicht bereits installiert ist, wird dies natürlich scheitern:
$ python setup.py install
Traceback (most recent call last):
File "setup.py", line 2, in <module>
from Cython.Build import cythonize
ImportError: No module named Cython.Build
Was ist der richtige Weg, dies zu tun? Ich muss ja irgendwie importieren Cython
nur nach der setup_requires
Schritt läuft, aber ich brauche Cython
zur Festlegung der ext_modules
Werte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie wickeln Sie die
from Cython.Build import cythonize
imtry-except
, und in derexcept
definierencythonize
als dummy-Funktion. Auf diese Weise kann das script geladen werden, ohne Ausfall mit einerImportError
.Dann später, wenn die
setup_requires
argument behandelt wird,Cython
installiert werden und das setup-Skript erneut ausgeführt werden. Da an diesem PunktCython
installiert ist, werden Sie in der Lage, erfolgreich zu importierencythonize
BEARBEITEN
Wie bereits angemerkt in den Kommentaren, nach setuptools Angebote mit fehlenden Abhängigkeiten, es wird nicht re-load Cython. Hatte ich nicht früher daran gedacht, aber Sie könnten auch versuchen, eine late-binding Ansatz der Lunte aus
cythonize
Cython
für die installation, gerade Entwicklung. AnstattExtension
Instanzen mitcythonize
sein, erstellen Sie Sie direkt auf dieCython
generiert .c-Dateien. Kasse diesem Beispiel github.com/mobiusklein/brainpy/blob/master/setup.pygdb_debug=True
zucythonize
wenn die Funktion nicht verwendet wird?Ab 18.0 release von
setuptools
(veröffentlicht am 2015-06-23) ist es möglich, anzugebenCython
imsetup_requires
und pass*.pyx
Module Quellen für regelmäßigesetuptools.Extension
: