cython setup.py выдает .o вместо .dll

1

Я новичок на 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 по необходимости, чего не происходит.

  • 0
    1. вы видите *.pyd файлы? 2. попробуйте его из того же каталога, то есть измените setup.py: Extension('fc', ['fc.pyx']) и запустите его как python setup.py build_ext --inplace . 3. Не мешало бы удалить пробелы из FC Extensions : setup(name='FC', ..
  • 1
    @JF Себастьян: Спасибо, JFS, это работает, у меня сейчас есть .pyd. Хотя у меня все еще есть неправильная 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.
Теги:
dll
cython
win64

2 ответа

1

Наконец, мне удалось построить расширение для win64. По-видимому, если у вас есть VC 2010 express, вы можете настроить disuilts на использование msvc9compiler для компиляции модуля. Подробности можно найти здесь. Большое спасибо ребятам из Nukeitdotorg за то, что они подняли это, а также к J.F. Sebastian за его советы.

  • 0
    Также для сборки из VS 2008, найдите путь к VCVARSALL.bat где-нибудь в VS 2008 в папке Programsx86. Затем запустите его в той же оболочке или .bat, используя вызов "- путь, который вы нашли -" перед:> python setup.py build_ext --inplace.
0

Вы пытались скомпилировать его с помощью

python setup.py build --compiler=mingw32

?

  • 0
    да, я это сделал и скомпилировал, но он работает только для 32-битных расширений. Для 64-битной версии mingw не является хорошим выбором, как рекомендуется здесь на вики-сайте Cython.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню