其他分享
首页 > 其他分享> > crcmod._crcfunext导入不成功的解决方法

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

作者:互联网

本人在学习阿里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