immersed-in-the-deep-sea

导航

 

背景

  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看一眼

  

 

  

  

 

posted on 2024-06-04 16:05  沉浸深海  阅读(109)  评论(0)    收藏  举报