您的位置:首页 > 编程语言 > Python开发

windows下python2.7安装grpc

2016-07-13 16:01 393 查看
公司有个项目需要在windows环境下,使用python2.7的grpc!

在网上没看见任何有用的信息!只能自己弄,还好,公司大牛宁工,已经帮我做了很多工作了!!

现在就如正题:grpc可以在git上下载下来。不过这个“vsprojects” 需要用自己vs打开 需要编译出来Release的库
,“Release”文件夹中最重要的一个文件"grpc_dll.dll",后面编译python的grpc时需要用的

打开cmd

你可以看见grpc根目录有个setup.py,看见这个就说明
4000
可以直接用“python  setup.py build”

但是你执行上面命令之前需要,需要安装依赖的第三方包,就在requirements.txt,里面

直接执行“pip install -r requirements.txt”就自动安装了!!

当你执行python setup.py build,会出错!

提示

pip install -rrequirements.txt 

GRPC_PYTHON_BUILD_WITH_CYTHON=1 pip install

第一个好理解,我们都做过了

第二个就是需要设置一下环境变量 “set GRPC_PYTHON_BUILD_WITH_CYTHON=1”

在执行 python setup.py build ,发现报错!!

提示说看见其中错误“not found stdbool.h”  ,最后提示“Microsoft Visual C++ 9.0 is required”!

“Microsoft Visual C++ 9.0 is required” 这个就是需要依赖vs2008才能编译,但是我试了,还是会报错“not found stdbool.h"

最后我发现,”stdbool.h“只有vs2015才有,所以,我就把 vs2008的环境变量”VS90COMNTOOLS“ 的值,改成了 vs2015的路径”C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\“



然后然后,在重新打开cmd,

grpc根目录下执行 "python setup.py build",发现没问题

接着”python setup.py install“, 成功了!!

我高兴死了,进入python,

import grpc 你会发现报错 "_windows/grpc_c.60.python"

但是这个时候你去python的Lib->site-packages下面是没有grpc这个package的!

其实grpc的包是里另一种egg的形式存在的就是这个文件”grpcio-0.16.0.dev0-py2.7-win32.egg”

你可以把egg改成zip,就看建了里面有个grpc的文件夹,考出来,放到site-packages下面,把“grpcio-0.16.0.dev0-py2.7-win32.egg”删

退出python

再重新进入python ,

>> import grpc,还是报错

根据报错提示我找到了在源码下面”cygrpc.pyx“这个文件,发现这段代码

if 'win32' in sys.platform:
filename = pkg_resources.resource_filename(
'grpc._cython', '_windows/grpc_c.64.python')
if not isinstance(filename, bytes):
filename = filename.encode()
if not pygrpc_load_core(filename): raise ImportError('failed to load core gRPC library')

这个意思你没有grpc_c.64.python这个文件,这个文件什么?

最后大神宁工,说是release编译出来的grpc_dll.dll,只不过要重命名一下就行了!!

要在上面拷贝出来的grpc的目录下面找_cython文件夹,在这个文件夹下新建"_windows"目录,将grpc_dll.dll拷贝过来,重命名grpc_c.64.python,

退出python,重新进入python

>>import grpc  如果你的python是64位的,则import成功,如果你的python是32位的,就会报错'failed to load core gRPC library',

这个是因为如果你的python是32位的,grpc,加载的会是grpc_c.32.python,所以,你只需要把“grpc_c.64.python”重命名成“grpc_c.32.python”就行了;

这是因为

if not pygrpc_load_core(filename):
raise ImportError('failed to load core gRPC library')


pygrpc_load_core()函数中会检测一下你的python,如果是32位的会自动替换64为32,所以为报错

int pygrpc_load_core(char *path) {
HMODULE grpc_c;
#ifdef GPR_ARCH_32
/* Close your eyes for a moment, it'll all be over soon. */
char *six = strrchr(path, '6');
*six++ = '3';
*six = '2';
#endif
grpc_c = LoadLibraryA(path);
if (grpc_c) {
pygrpc_load_imports(grpc_c);
return 1;
}

return 0;
}


以上就是全部问题。

重新进入python
>>import grpc 
>>
成功了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: