2015-09-04 78 views
2

這是單個問題中的兩個單獨的錯誤。 我遵循Cython網站上關於如何構建一個cython腳本的文檔。我創建.pyx文件,做cython -a filename.pyx --embed創建.c文件,然後將.c文件從Cython轉換爲獨立的.exe和編譯gcc錯誤

import pyximport; pyximport.install() 
import filename 

運行我的Hello World程序。

現在我要實現隨機森林用Cython和我用下面的模塊,而進口:

from __future__ import division 
from sklearn.ensemble import RandomForestClassifier 
import pymysql 
import datetime 
import csv 
from operator import itemgetter 
from sklearn.metrics import * 
from algoScore import algo_score 
import sys 

當我嘗試做用Cython -a randomforest.pyx **是表明對於一些錯誤** numpy的所以我想既然numpy的使用C頭文件,我需要通過提供setup.py包含路徑(Following this link)使用的distutils構建和下面是我的setup.py:

from distutils.core import setup 
from Cython.Build import cythonize 
import numpy 

setup(
    name = "Test script", 
    ext_modules = cythonize('randomforest.pyx', include_path = [numpy.get_include()]), # accepts a glob pattern 
) 

當我嘗試建立文件來回通過下面的命令M指令行:

python setup.py build_ext --inplace 

我收到以下錯誤:

running build_ext 
building 'randomforest' extension 
c:\mingw\bin\gcc.exe -mdll -O -Wall -IC:\Python27\include -IC:\Python27\PC -c randomforest.c -o build\temp.win32-2.7\Release\randomforest.o 
writing build\temp.win32-2.7\Release\randomforest.def 
c:\mingw\bin\gcc.exe -shared -s build\temp.win32-2.7\Release\randomforest.o build\temp.win32-2.7\Release\randomforest.def -LC:\Python27\libs -LC:\Python27\PCbuild -lpython27 -lmsvcr90 -o "e:\PA - Project\CodeBase\Tests\balanceClasses\balanceClasses\RF\randomforest.pyd" 
C:\Python27\libs/libpython27.a(dmmes00976.o):(.idata$7+0x0): undefined reference to `_head_C__build27_cpython_PCBuild_libpython27_a' 
C:\Python27\libs/libpython27.a(dmmes00239.o):(.idata$7+0x0): undefined reference to `_head_C__build27_cpython_PCBuild_libpython27_a' 
C:\Python27\libs/libpython27.a(dmmes00236.o):(.idata$7+0x0): undefined reference to `_head_C__build27_cpython_PCBuild_libpython27_a' 
C:\Python27\libs/libpython27.a(dmmes00245.o):(.idata$7+0x0): undefined reference to `_head_C__build27_cpython_PCBuild_libpython27_a' 
C:\Python27\libs/libpython27.a(dmmes00343.o):(.idata$7+0x0): undefined reference to `_head_C__build27_cpython_PCBuild_libpython27_a' 
C:\Python27\libs/libpython27.a(dmmes00386.o):(.idata$7+0x0): more undefined references to `_head_C__build27_cpython_PCBuild_libpython27_a' follow 
collect2: ld returned 1 exit status 
error: command 'c:\\mingw\\bin\\gcc.exe' failed with exit status 1 

此外,儘管產生的錯誤,我得到生成的.c文件和.DEF & .o文件以及。

我想知道天氣文件是編譯器嗎?我可以通過導入或不導入從pyximport運行它嗎?另外,如果我不能,那麼是否有任何具體的方法來使用任何編譯器將.c文件編譯爲獨立的.exe文件?

我嘗試使用VC++命令行編譯器/ c和我遇到了問題,如following link(編輯1)中所述。

如果有人幫助我,因爲我長期以來一直面對這個問題,甚至使用google搜索似乎沒有給出任何答案。

回答

1

當我嘗試用cython和cygwin GCC構建簡單的「hello world」程序(http://omake.accense.com/static/doc-ja/cython/src/quickstart/build.html)時,我收到了類似的錯誤消息。

在我的情況下,使用VC編譯器解決了這個問題。

1)安裝微軟的Visual C++爲Python(http://www.microsoft.com/en-us/download/details.aspx?id=44266

2)加入其安裝的註冊表路徑(編輯安裝註冊表是C:\ Program Files文件(x86)的\ Common Files文件\微軟\的Visual C++爲Python在我的環境中)

3)創建配置文件(C:\ Python27 \ Lib \ distutils \ distutils.cfg)。 然後在其中寫下以下文字。

[build_ext] 
compiler=msvc 

4)然後用cython編譯。

python setup.py build_ext --inplace