繁体   English   中英

CythonGSL /通过Cython在Windows上使用GSL

[英]CythonGSL/ Using GSL on Windows via Cython

机器配置:我的配置是Windows 7 x64,安装了python 2.7和cython 0.18(全部64位)。 我还安装了MS C ++ 2008 Visual Studio。

我有GSL二进制文件,并且Path指向GSL \\ Bin。

我正在使用MS VS 2008 + SDK 7.0来编译cython .pyx文件。 我使用SDK 7.0命令提示符编译为c和cython。

问题但是在编译时我得到一个LINK错误2019,表示没有找到GSL文件夹中的头文件。

我的尝试为了解决这个问题,我下载了CythonGSL。 使用“来自cythonGSL cimport *”没有用。 我转到了这个包的init文件,并更改了它所搜索的目录,以适应我安装GSL的位置。 我已经更新了CythonGSL自述文件中显示的setup.py.

没有用!! 在编译时,它说没有找到gsl.lib。

知道如何解决这个问题吗?

一种选择是,如果我可以指定一个静态地址,例如,代替

    cdef extern from "libcalg/queue.h":
       with
    cdef extern from "FUll File Path/queue.h":

那现在还不行。

setup.py

from 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:\LDA\pythonLDA>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.0\VC\Bin\amd64\cl.exe /c /nolog
o /Ox /MD /W3 /GS- /DNDEBUG -IC:\Python27\lib\site-packages -IC:/GSL/include -IC
:\Python27\lib\site-packages\numpy\core\include -IC:\Python27\include -IC:\Pytho
n27\PC /Tclda_gibbs_cython.c /Fobuild\temp.win-amd64-2.7\Release\lda_gibbs_cytho
n.obj
lda_gibbs_cython.c
c:\python27\lib\site-packages\numpy\core\include\numpy\npy_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.0\VC\Bin\amd64\link.exe /DLL /n
ologo /INCREMENTAL:NO /LIBPATH:C:/GSL/lib /LIBPATH:C:\Python27\libs /LIBPATH:C:\
Python27\PCbuild\amd64 gsl.lib gslcblas.lib /EXPORT:initlda_gibbs_cython build\t
emp.win-amd64-2.7\Release\lda_gibbs_cython.obj /OUT:D:\LDA\pythonLDA\lda_
gibbs_cython.pyd /IMPLIB:build\temp.win-amd64-2.7\Release\lda_gibbs_cython.lib /
MANIFESTFILE:build\temp.win-amd64-2.7\Release\lda_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

海湾合作委员会尝试

我安装了TDM-GCC,所以我可以使用标准的cmd窗口:

.pyx和setup.py保持不变。我有一个问题记录并在这里解决-mno-cygwin:gcc构建Mercurial(Windows 2000) 还是没有雪茄。 我不知道这是否应该是一个单独的问题 - 如果专家认为这样的话会动。

D:\LDA\pythonLDA>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:\MinGW64\bin\gcc.exe -mdll -O -Wall -IC:\Python27\lib\site-packages -IC:/GSL/i
nclude -IC:\Python27\lib\site-packages\numpy\core\include -IC:\Python27\include
-IC:\Python27\PC -c lda_gibbs_cython.c -o build\temp.win-amd64-2.7\Release\lda_g
ibbs_cython.o
writing build\temp.win-amd64-2.7\Release\lda_gibbs_cython.def
C:\MinGW64\bin\gcc.exe -shared -s build\temp.win-amd64-2.7\Release\lda_gibbs_cyt
hon.o build\temp.win-amd64-2.7\Release\lda_gibbs_cython.def -LC:/GSL/lib -LC:\Py
thon27\libs -LC:\Python27\PCbuild\amd64 -lgsl -lgslcblas -lpython27 -l -o D:\LDA\pythonLDA\lda_gibbs_cython.pyd
gcc: error: D:\LDA\pythonLDA\lda_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:\\GSL\\bin到你的PATH 我有一篇博文 ,详细解释。

聊天讨论的更多解释: TDM-GCC + EPD + GSL (稍作修改 - GSL文件必须位于C:\\Program Files\\GnuWin32\\ 。这适用于64位Windows 7。

使用可能在MS VS C ++ 2008上编译的Windows二进制文件可能会导致与mingw64编译的C ++程序冲突。


更多设置说明 (已添加)

一般来说,使用Python(x,y) (免费), Enthought Canopy (EPD的继承者,有限免费版)或Anaconda (免费除高级软件包)之外的科学python发行版要比安装单个软件包容易得多。在香草蟒蛇之上。 似乎所有三个发行版都带有MinGW,所以如果你不需要openmp支持Cython,你应该很好,如果你这样做,你可以安装TDM-GCC

GSL ,您可以从oscats项目下载二进制GSL 它有32位和64位二进制文​​件,带有devel头。

我的设置是Anaconda + TDM-GCC + GSL (来自oscats项目)并且它一直运行良好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM