WIN7(64位)安装Python模块py-radix

前言:

py-radix是用C语言实现的python模块,实现了radix算法(最长前缀匹配算法,用于路由查找)

py-radix模块下载:

我下载的最新的版本 py-radix-0.5.tar

py-radix模块安装:

1,解压文件,进入目录 \py-radix-0.5
2,打开cmd ,进入相应目录,执行setup.py
执行命令依次如下:python setup.py build
    python setup.py install
       如果中间不提示error,自然就是安装成功了。
3,测试,如下图所示,则表示成功:
技术分享

错误问题和解决方法:

当然,我并没有如此幸运主要是遇到了两个问题:
1,第一:Unable to find vcvarsall.bat”错误。
     原因分析:定位错误发现在C:/Python27/Lib/distutils目录下.py文件中,进一步,发现“unable to find vcvarsall.bat”这句话出在svc9compiler.py中。它是在注册表中寻找到vs的目录,再去在vs目录下找vcvarsall.bat。如代码中所述,python27里面默认是vc9.0也就是vs2008所对应的C++编译器是msvc 9.0,也就是说如果你的机器上安装了VS2008应该不会出现这种错误,但是我的机器是安装的VS2010,其编译器版本是msvc 10.0,所以它在注册表里面找不到键值返回None

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实现如下:

技术分享


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。