2011-03-14 45 views
1

我是cython的新手,所以請原諒我,如果我在這裏丟失了一些明顯的東西。我正在嘗試構建用於python的c擴展以提高性能。我有fc.py模塊一堆功能,並嘗試使用dsutils和Win64上運行時要產生通過用Cython一個.dll:cython setup.py給出.o而不是.dll

c:\python26\python c:\cythontest\setup.py build_ext --inplace

我在C dsutils.cfg:\ 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 

我有用於目標/主機amdwin64類型構建的最新版本mingw。我有用於win64的python26的cython最新版本。 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擴展中刪除空格並不會造成什麼傷害:'setup(name ='FC',..' – jfs 2011-03-14 14:17:42

+1

@JF Sebastian:謝謝JFS,這是可行的,我現在有了.pyd。錯誤內置錯誤:'ImportError:DLL加載失敗:%1不是有效的Win32應用程序。「但我想這是來自使用mingw,因爲我[閱讀](http://wiki.cython.org/64BitCythonExtensionsOnWindows )它在win64上不起作用 – alok 2011-03-14 16:35:20

回答

1

最後,我能夠爲win64構建擴展。顯然,如果你有VC 2010 Express,你可以調整disuilts來使用msvc9compiler編譯模塊。詳情可在here找到。非常感謝nukeitdotorg的人提出這個問題,也感謝J.F. Sebastian的提示。

+0

同樣爲了從VS 2008開始構建,找到VS 2008中某個地方的programsx86文件夾中的VCVARSALL.bat路徑,然後使用調用「 - path」命令在同一個shell或.bat中運行它。你找到了 - 「之前:>> python setup.py build_ext --inplace。 – alok 2011-03-16 04:07:23

0

你嘗試用

python setup.py build --compiler=mingw32 

編譯它?

+0

是的,我做了,我編譯它,但它只適用於32位擴展。對於64位,mingw不是一個好的選擇[這裏](http://wiki.cython.org/64BitCythonExtensionsOnWindows)。 – alok 2011-03-22 01:11:10