0%

python 3.12 安装D2L包时报错:module 'pkgutil' has no attribute 'ImpImporter'

前情提要:

工作后,原本对AI不屑一顾的我,终究还是捡起了AI(つ﹏⊂),真香.jpg(

然后找了找教程,发现《动手深度学习》这个教程非常好,于是,miniconda,下载!python,启动!Jupyter、D2L,安装!

由于miniconda下载的是最新版,所以python默认是3.12.7版本,然后在安装D2L包的时候遇到了如下报错。。。

1
2
3
xxxxxxxxx(一堆看不懂的东西)

AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did youean: 'zipimporter'?

遇上上网一顿搜,发现可能是D2L包中指定numpy的版本与python312不匹配的问题,需要我们自行下载源码然后修改numpy的版本。

后续操作:

  1. 华为的镜像仓库下载D2L的源码(我下的是1.0.3版本

解压,然后进入到解压后的文件夹目录,如下,

解压后的源码文件夹内容

  1. 修改setup.py方法中的requirements为如下:
1
2
3
4
5
6
7
8
9
requirements = [
'jupyter==1.0.0',
'numpy==1.26.3', # 主要是这里的版本
'matplotlib==3.8.2',
'matplotlib-inline==0.1.6',
'requests==2.31.0',
'pandas==2.2.0',
'scipy==1.12.0'
]
  1. 执行:python setup.py install

顺利的话这一步应该就能够解决,但我不顺利/(ㄒoㄒ)/~~

你可能会卡在从pypi库中下载scipy包(或者其他包),这里感觉是源的问题,然后上网搜索pip修改源的方法,永久修改为清华源,仍然会卡在这,而且看命令行的信息,下载的源并没有修改,很迷。。。ctrl+c后,再次运行会产生一个xxx.egg文件被使用无法删除的错误,手动找到这个文件删除即可。

  1. 最终解决

最后使用pip指令来安装刚刚下载的D2L源码,安装的指令需要指定源,需要在上面图片的那级目录下执行,具体指令如下:

1
pip install . --index-url https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn

install后面的.,表示是当前目录(即需要被安装的源码目录),使用--index-url参数指定源,--trusted-host参数表示信任后面的主机(对于SSL证书有问题的来说,这里不加应该也行)。