背景
pycurl公司最新的版本只能到7.44.1而这个官方是不支持3.10以上,在使用3.9的时候只能源码构建,而且不好申请入库,且巨难编译,搞了一周左右

源码就是官方download的tar包。
把tar包解压在比如你的项目目录里,我们可以通过python setup.py install来构建
环境准备
python3.9,如果是其他python环境不一定适用
vs2017,用到了vs的nmake和cmake
构建问题及解决方案
第一步,首先会遇到一个缺disutils的类似的,这个解决方案:
C:\Users\用户\AppData\Local\Programs\Python\Python39\Lib\distutils\command\bdist_msi这个文件,移动到Python\Python39\Lib\site-packages\setuptools\_distutils下
如果不知道site-packages在哪里,可以通过pip show 来找到
第二步,这个搞完以后再python setup.py install会报错如下:
LooseVersion(distutils.__version__) > LooseVersion("1.0.1"):
if LooseVersion(distutils.__version__) < LooseVersion("1.0.3"):
Please specify --curl-dir=/path/to/built/libcurl
注意这里他说的是LooseVersion的版本有问题,我们要替换成from packaging.version import Version,不然是过时的
头文件加上
from packaging.version import Version
941行左右改成如下内容,原来用的LooseVersion注释掉
if Version(distutils.__version__) > Version("1.0.1"): setup_args["platforms"] = "All" if Version(distutils.__version__) < Version("1.0.3"): setup_args["licence"] = setup_args["license"]
再执行会报
Please specify --curl-dir=/path/to/built/libcurl
这个错误的原因,定位到最开始可能是setup.py里面没写路径,但我往里面写了还是没报错,后来谷歌查到有人问是因为python setup.py install 后面还可以带上这个参数libcurl的要找到。
也就是加上python setup.py install --curl-dir="D:\cjm\software\idea\ideaProject\XXX\curl-8.6.0",我这里的curl-8.6.0就是curl的源码,在官网可以下载https://curl.se/download.html
加上以后还会有报错
libcurl.lib does not exist at D:\cjm\software\idea\ideaProject\Smart-Agent\curl-8.6.0\lib\libcurl.lib.
Curl directory must point to compiled libcurl (bin/include/lib subdirectories): D:\cjm\software\idea\ideaProject\Smart-Agent\curl-8.6.0
这里是说缺少libcurl.lib这个文件,而这个文件是通过vs编译出来的。
接下来的内容说明如何编译出libcurl.lib这个文件
去这个位置找到属于你本机的系统类型的cmd,注意这里是个巨坑,即使你配置了vs的各种环境变量,你用cmd直接也会有问题,但用这里不会有问题
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2017\Visual Studio Tools\VC
执行如下指令
先是cd到你的curl-8.6.0的winbuild目录下,再nmake编译
cd D:\cjm\software\idea\ideaProject\Smart-Agent\curl-8.6.0\winbuild nmake /f Makefile.vc mode=static VC=14 MACHINE=x64 DEBUG=no
如果系统不一样参考这篇
https://www.cnblogs.com/Galesaur-wcy/p/15512187.html
编译出来的文件夹是curl下面的一个builds,我的长以下这样

在第一个文件夹中的lib有libcurl_a.lib,骚操作来了,我查了一些资料,没说明这个是不是libcurl.lib但我经过尝试,将它复制改名到后面并不会报错
也就是说需要复制到curl-8.6.0/lib下并改名成libcurl.lib。
再执行python setup.py install --curl-dir="D:\cjm\software\idea\ideaProject\XXX\curl-8.6.0"
报错UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd3 in position 0: invalid continuation byte
这个是编码的问题,定位到错误在setup.py的478行左右
有一行
match = re.search(r'Version (\d+)', err.decode().split("\n")[0])
改为
match = re.search(r'Version (\d+)', err.decode('ANSI').split("\n")[0])
再来一次,site-packages下出现python蛋egg的信息就OK了,也可以通过pip show pycurl看一眼

浙公网安备 33010602011771号