这是单个问题中的2个单独错误。
我按照Cython网站上关于如何构建cython脚本的文档进行了操作。我创建.pyx文件,cython -a filename.pyx --embed
创建.c文件然后
import pyximport; pyximport.install()
import filename
运行我的简单hello world程序。
现在我想在Random Forest上实现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头,我需要通过提供include_path来构建使用distutils setup.py(Following this link)以及以下是我的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
)
当我尝试通过以下命令从命令行构建文件时:
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文件?
我尝试使用编译器/ c的VC ++命令行,我遇到了following link(编辑1)中描述的问题。
如果有人帮助我,我会很感激,因为我已经长期面对这一点,甚至谷歌搜索似乎没有给出任何答案。
答案 0 :(得分:1)
当我尝试构建简单的" hello world"时,我收到了类似的错误消息。程序(http://omake.accense.com/static/doc-ja/cython/src/quickstart/build.html)与cython和cygwin GCC。
就我而言,使用VC编译器解决了这个问题。
1)从Microsoft安装Visual C ++ for Python(http://www.microsoft.com/en-us/download/details.aspx?id=44266)
2)将已安装的注册表添加到PATH(在我的环境中安装注册表为C:\ Program Files(x86)\ Common Files \ Microsoft \ Visual C ++ for Python)
3)创建配置文件(C:\ Python27 \ Lib \ distutils \ distutils.cfg)。 然后在其中写下以下文字。
[build_ext]
compiler=msvc
4)然后用cython编译。
python setup.py build_ext --inplace