Я новичок на cython, поэтому простите меня, если я упустил что-то очевидное здесь. Я пытаюсь создать c расширения, которые будут использоваться в python для повышения производительности. У меня есть модуль fc.py с кучей функций и попытка сгенерировать DLL через cython с помощью dsutils и запустить на win64:
c:\python26\python c:\cythontest\setup.py build_ext --inplace
У меня есть dsutils.cfg в C:\Python26\Lib\distutils. При необходимости disutils.cfg имеет следующие настройки конфигурации:
[build]
compiler = mingw32
Мой startup.py выглядит так:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [Extension('fc', [r'C:\cythonTest\fc.pyx'])]
setup(
name = 'FC Extensions',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules
)
Это то, что вывод командной строки выглядит следующим образом:
C:\python26\python C:\cythontest\setup.py build_ext --inplace
running build_ext
cythoning C:\cythonTest\fc.pyx to C:\cythonTest\fc.c
building 'FC' extension
C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -Ic:\python26\include -Ic:\pytho
n26\PC -c C:\cythonTest\fc.c -o c:\cythontest\fc.o
У меня есть последняя версия mingw для сборки типа target/host amdwin64. У меня есть последняя версия cython для python26 для win64. Cython действительно дает мне fc.c без ошибок, только несколько предупреждений о преобразованиях типов, которые я буду обрабатывать, как только у меня все получится. Далее он создает fc.def файлы fc.o Вместо того, чтобы давать .dll. У меня нет ошибок. Я нахожу в потоках, что он автоматически создаст .so или .dll по необходимости, чего не происходит.
Наконец, мне удалось построить расширение для win64. По-видимому, если у вас есть VC 2010 express, вы можете настроить disuilts на использование msvc9compiler для компиляции модуля. Подробности можно найти здесь. Большое спасибо ребятам из Nukeitdotorg за то, что они подняли это, а также к J.F. Sebastian за его советы.
Вы пытались скомпилировать его с помощью
python setup.py build --compiler=mingw32
?
*.pyd
файлы? 2. попробуйте его из того же каталога, то есть измените setup.py:Extension('fc', ['fc.pyx'])
и запустите его какpython setup.py build_ext --inplace
. 3. Не мешало бы удалить пробелы изFC Extensions
:setup(name='FC', ..
ImportError: DLL load failed: %1 is not a valid Win32 application.
с ошибкой:ImportError: DLL load failed: %1 is not a valid Win32 application.
ОшибкаImportError: DLL load failed: %1 is not a valid Win32 application.
Но я полагаю, что это связано с использованием mingw, так как я читал, что он не работает на win64.