机器配置:我的配置是windows 7 x64,安装了python 2.7和cyth0.18(都是64位)。我还安装了MS c++ 2008 Visual Studio。
我有GSL二进制文件,并有路径指向GSLBin。
我使用MS VS 2008 + SDK 7.0来编译cython .pyx文件。我使用SDK 7.0命令提示符编译成c和cython。
然而,在编译时,我得到一个链接错误2019,这表明GSL文件夹中的头文件没有被找到。
我尝试为了解决这个问题,我下载了CythonGSL。使用"from cythonGSL cimport *"不起作用。我去了这个包的init文件,并更改了它似乎正在搜索的目录,以适合我安装GSL的位置。我已经更新了setup.py,如CythonGSL自述文件所示。
这个没有工作 !!在编译时,它说gsl。未找到Lib .
知道我怎么能解决这个问题吗?
一个选项是如果我可以指向一个静态地址例如,在
的位置 cdef extern from "libcalg/queue.h":
with
cdef extern from "FUll File Path/queue.h":
现在不行
pyfrom distutils.core import setup
from Cython.Distutils import Extension
from Cython.Distutils import build_ext
import cython_gsl
import numpy as np
setup(
include_dirs = [cython_gsl.get_include(), np.get_include()],
cmdclass = {'build_ext': build_ext},
ext_modules = [Extension("lda_gibbs_cython",
["lda_gibbs_cython.pyx"],
libraries=cython_gsl.get_libraries(),
library_dirs=[cython_gsl.get_library_dir()],
include_dirs=[cython_gsl.get_cython_include_dir()])]
)
唯一的区别是我包含了np.get_include ()
我的.pyx文件:(从https://github.com/twiecki/CythonGSL/blob/master/examples/gibbs.pyx借来进行测试)
import numpy as np
cimport numpy as np
cimport cython
DTYPE = np.int
ctypedef np.int_t DTYPE_t
from scipy.special import gammaln
from cython_gsl cimport *
cdef gsl_rng *r = gsl_rng_alloc(gsl_rng_mt19937)
来自Cython GSL尝试的错误消息:
D:LDApythonLDA>setup.py build_ext --inplace
running build_ext
cythoning lda_gibbs_cython.pyx to lda_gibbs_cython.c
building 'lda_gibbs_cython' extension
C:Program Files (x86)Microsoft Visual Studio 9.0VCBinamd64cl.exe /c /nolog
o /Ox /MD /W3 /GS- /DNDEBUG -IC:Python27libsite-packages -IC:/GSL/include -IC
:Python27libsite-packagesnumpycoreinclude -IC:Python27include -IC:Pytho
n27PC /Tclda_gibbs_cython.c /Fobuildtemp.win-amd64-2.7Releaselda_gibbs_cytho
n.obj
lda_gibbs_cython.c
c:python27libsite-packagesnumpycoreincludenumpynpy_deprecated_api.h(8) :
Warning Msg: Using deprecated NumPy API, disable it by #defining NPY_NO_DEPRECA
TED_API NPY_1_7_API_VERSION
lda_gibbs_cython.c(2812) : warning C4244: 'function' : conversion from '__int64'
to 'long', possible loss of data
lda_gibbs_cython.c(4811) : warning C4101: 'getbuffer_cobj' : unreferenced local
variable
lda_gibbs_cython.c(4842) : warning C4101: 'releasebuffer_cobj' : unreferenced lo
cal variable
C:Program Files (x86)Microsoft Visual Studio 9.0VCBinamd64link.exe /DLL /n
ologo /INCREMENTAL:NO /LIBPATH:C:/GSL/lib /LIBPATH:C:Python27libs /LIBPATH:C:
Python27PCbuildamd64 gsl.lib gslcblas.lib /EXPORT:initlda_gibbs_cython buildt
emp.win-amd64-2.7Releaselda_gibbs_cython.obj /OUT:D:LDApythonLDAlda_
gibbs_cython.pyd /IMPLIB:buildtemp.win-amd64-2.7Releaselda_gibbs_cython.lib /
MANIFESTFILE:buildtemp.win-amd64-2.7Releaselda_gibbs_cython.pyd.manifest /MAN
IFEST
LINK : fatal error LNK1181: cannot open input file 'gsl.lib'
error: command 'link.exe' failed with exit status 1181
<<p> GCC尝试/strong> 我安装了TDM-GCC,所以我可以使用标准的cmd窗口:
。Pyx和setup.py保持不变。我在这里记录并解决了一个问题-mno-cygwin: gcc构建Mercurial (Windows 2000)。还是没有雪茄。我不知道这是否应该是一个单独的问题——如果专家这么认为,我将采取行动。
D:LDApythonLDA>setup.py build_ext --inplace -c mingw32
running build_ext
skipping 'lda_gibbs_cython.c' Cython extension (up-to-date)
building 'lda_gibbs_cython' extension
C:MinGW64bingcc.exe -mdll -O -Wall -IC:Python27libsite-packages -IC:/GSL/i
nclude -IC:Python27libsite-packagesnumpycoreinclude -IC:Python27include
-IC:Python27PC -c lda_gibbs_cython.c -o buildtemp.win-amd64-2.7Releaselda_g
ibbs_cython.o
writing buildtemp.win-amd64-2.7Releaselda_gibbs_cython.def
C:MinGW64bingcc.exe -shared -s buildtemp.win-amd64-2.7Releaselda_gibbs_cyt
hon.o buildtemp.win-amd64-2.7Releaselda_gibbs_cython.def -LC:/GSL/lib -LC:Py
thon27libs -LC:Python27PCbuildamd64 -lgsl -lgslcblas -lpython27 -l -o D:LDApythonLDAlda_gibbs_cython.pyd
gcc: error: D:LDApythonLDAlda_gibbs_cython.pyd: No such file or direct
ory
error: command 'gcc' failed with exit status 1
我只使用CythonGSL
-当前版本(https://github.com/twiecki/CythonGSL/blob/master/cython_gsl/__init__.py)读取环境变量LIB_GSL
来确定GSL
目录的位置。确保您有LIB_GSL
环境变量指向您的主GSL
文件夹(而不是bin
文件夹)。例如,LIB_GSL=C:/GSL
。然后把C:GSLbin
加到PATH
上。我在博客上有一篇详细的解释。
更多来自聊天讨论的解释: TDM-GCC
+ EPD
+ GSL
(有一个小的变化- GSL文件必须在C:Program FilesGnuWin32
。
使用可能在MS VS c++ 2008上编译的Windows二进制文件可能会导致与mingw64
编译的c++程序发生冲突。
更多设置说明 (add)
一般来说,使用科学python发行版,如python (x,y)(免费),Enthought Canopy (EPD的继承者,限制免费版本)或Anaconda(免费,高级软件包除外)比在vanilla python上安装单个软件包要容易得多。似乎这三个发行版都附带了MinGW,所以如果您不需要对Cython的openmp支持,您应该很好,如果您需要,您可以安装TDM-GCC。
对于GSL
,您可以从oscats项目中下载二进制GSL
。它有32位和64位二进制文件,带有devel头文件。
我的设置是Anaconda
+ TDM-GCC
+ GSL
(来自oscats项目),它一直工作得很好。