WIN7(64位)安装Python模块py-radix
前言:
py-radix是用C语言实现的python模块,实现了radix算法(最长前缀匹配算法,用于路由查找)
py-radix模块下载:
我下载的最新的版本 py-radix-0.5.tarpy-radix模块安装:
错误问题和解决方法:
productdir = Reg.get_value(r"%s/Setup/VC" % vsbase,
"productdir")
vsbase值为:Software/Microsoft/VisualStudio/9.0
所以解决问题的方法如下:
svc9compiler.py中
def find_vcvarsall(version) 用于查找vcvarsall.bat version就是版本号,实际上是9.0
vc_env = query_vcvarsall(VERSION, plat_spec)
VERSION = get_build_version() 因为python27自己是由vc9.0构建的所以VERSION是9.0
修改MSVCCompiler函数:
vc_env = query_vcvarsall(VERSION, plat_spec)
为:
vc_env = query_vcvarsall(10.0, plat_spec)
不过还有这句话:
if VERSION < 8.0:
raise DistutilsPlatformError("VC %0.1f is not supported by this module" % VERSION)
看来,python3.2中的distutils只支持vc8.0以上,即vs2005以上的编译器。
另外,网上也有说 进入CMD 并执行 :SET VS90COMNTOOLS=%VS100COMNTOOLS% ,经测试这种方法也是果断可以的,因为道理一样。另外,也有
通过安装mingw来解决的,未尝试,也不推荐,何必这么麻烦?
第二:error C2373:"inet_ntop":重定义,不同的类型修饰符错误。
原因分析:错误提示如下图:
提示给的详细,也就是说,inet_ntop":重定义了,但是类型修饰符不同,于是进入相应文件进行定位:
radix.h中的函数:
ws2tcpip.h中的函数:
radix.c中的函数:
用到inet_ntop地方都在这里了,问题貌似比较明显了,就是ws2tcpip.h中的第二个参数是PVOID类型,即void *类型,其他的则为const void *类型,所以
就是修改radix.x的相关函数了,可不要想着去修改系统的函数文件ws2tcpip.h,防止以后出现莫名奇妙的错误。改完了,经测试,错误还在,这是为什么呢?进入文件夹
发现\py-radix-0.5中还提供了inet_ntop.c文件来实现inet_ntop,而且radix.*就是引用的它的实现,看来inet_ntop的实现根本就没用到系统提供的,但是函数名字
又一致,参数类型不同,所以出现了错误。那么就找一个一劳永逸的方法吧,直接把\py-radix-0.5中用的inet_ntop函数改一个新的名字就可以了,经测试
果真好用,成功解决问题。
其中inet_ntop.c中的inet_ntop实现如下:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。