ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

crcmod._crcfunext导入不成功的解决方法

2022-06-08 12:33:41  阅读:250  来源: 互联网

标签:crcfunext Users Hui 1.7 ._ crcmod 安装


本人在学习阿里OSS的使用,我用的python环境。刚开始就遇到了在安装完OSS库之后,按教程指导,验证crcmod出现问题。

>>> import crcmod._crcfunext
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'crcmod'

阿里文档是这么说的:

出现这种情况的原因是编译crcmod时,由于_crcfunext.so依赖Python.h文件,而系统中缺少这个头文件,因此_crcfunext.so库生成失败。CRC数据校验就会使用纯Python方式。虽然SDK安装成功,但是上传、下载等操作的效率非常低下。

对于Windows系统,如果出现该问题,请下载crcmod-1.7.win32-py2.7.msi或者其他版本的.msi文件进行安装,并在安装过程中指定crcmod的安装路径到您本地python安装路径下的Lib\site-packages文件夹,例如D:\python\Lib\site-packages\。安装完成后,再执行验证crcmod的步骤。

按照提示,去下载了crcmod-1.7.win32-py2.7.msi包,并安装,安装时,选择路径要选择到Lib上一层目录就好,如下图所示,这个安装程序会自己建立Lib/site-packages,否则路径会不对。

 

 

 安装好之后,在目录下已经有了_crcfunext.pyd了,如下图所示。

 

 

 

到这里,再import crcmod._crcfunext.pyd应该就可以成功了。但出现了以下问题:

>>> import crcmod._crcfunext
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: DLL load failed: 找不到指定的模块。

到这里蛋疼了好久。看了一下crcmod的文档,它说是在python3.1环境下测试了,而且已经好久没有更新过了。我用的是python3.7环境,问题可能出在了版本兼容上面。我的思路是在python3.7的环境下重新编译生成pyd文件替换,应该就可以了。

我是用gcc来编译的,如果构建gcc编译环境,请查阅相关资料。

在crcmod-1.7.win32-py3.1.msi下载页面上,下载其源码包crcmod-1.7.tar.gz。解压后,找到_crcfunext.c文件,如下图,并在同层目录下打开CMD。 

使用gcc生成二进制.o文件:

PS C:\Users\Hui\Downloads\crcmod-1.7\python3\src> gcc -c -I C:\Users\Hui\AppData\Local\Programs\Python\Python37-32\include -o _crcfunext.o _crcfunext.c

其中C:\Users\Hui\AppData\Local\Programs\Python\Python37-32\include为python安装目录下的include文件夹路径。

再使用gcc生成.pyd文件:

PS C:\Users\Hui\Downloads\crcmod-1.7\python3\src> gcc -shared -L C:\Users\Hui\AppData\Local\Programs\Python\Python37-32\libs -o _crcfunext.pyd _crcfunext.o -lpython37

其中C:\Users\Hui\AppData\Local\Programs\Python\Python37-32\libs为python目录下libs文件夹路径。

没有问题的话,在文件夹下面会生成_crcfunext.pyd文件,将其替换python目录下的...Lib/site-packages/crcmod同名文件,再次验证,则不会再报错。

>>> import crcmod._crcfunext
>>>

到此,问题算是解决了。

 

在用pip卸载的时候发现卸载不了,如下图所示。提示使用distutils方法安装的模块,pip不能识别哪些文件属于它,所以不能用pip卸载。

PS C:\Users\Hui\Downloads\crcmod-1.7> pip uninstall crcmod
Found existing installation: crcmod 1.7
ERROR: Cannot uninstall 'crcmod'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
PS C:\Users\Hui\Downloads\crcmod-1.7>

使用crcmod-1.7.win32-py3.1.msi安装包进行卸载,再用pip安装,然后再将上面编译成功的_crcfunext.pyd拷进...Lib/site-packages/crcmod即可。

 

标签:crcfunext,Users,Hui,1.7,._,crcmod,安装
来源: https://www.cnblogs.com/rodius/p/16355201.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有