Python无法找到dateutil.relativedelta

40 投票
4 回答
84069 浏览
提问于 2025-04-17 07:54

我在用 paster serve 运行一个程序的时候,老是出现这个错误:

ImportError: 没有名为 dateutil.relativedelta 的模块

我用的是 Python 2.6.7 和 dateutil 1.5,所以这个模块应该是安装过的。

有没有人知道为什么会这样呢?

我导入模块的方式是:

from dateutil.relativedelta import *

我甚至在搜索的时候能看到这个包:

/usr/lib/python2.7/site-packages/dateutil/relativedelta.pyc
/usr/lib/python2.7/site-packages/dateutil/relativedelta.py
/usr/lib/python2.7/site-packages/dateutil/relativedelta.pyo

更新

我一看就发现,dateutil 只安装在 Python 2.7 上,我猜我之前做的事情是:

sudo yum install python-dateutil

这样的话,sudo 会切换到默认的 Python 版本(也就是 Python 2.7,而不是 2.6.4)。

解决这个问题其实很简单:

su
(switch to virtual environment)
yum install python-dateutil

使用 su 然后切换到虚拟环境,这样可以获得管理员权限,并且安装到虚拟 Python 目录里。使用 sudo 则会把库安装到默认目录,而不是虚拟环境的 site-packages 里。

4 个回答

1

我觉得这看起来像是安装包的问题。以下是我想到的一些排查步骤:

  1. 确认你已经安装了这个包。
  2. 如果已经安装,检查一下文件是否放在正确的目录里(这个目录需要能被你的Python解释器访问,也就是在PYTHONPATH里。这里有一篇有用的文章点击查看)。
  3. 检查一下这些文件的权限。
  4. 如果你在命令行里尝试过导入,重启一下你的命令行窗口。
  5. 重启你的电脑(哎……我用GNU/Linux已经10年了,但还是对Windows的那些糟糕记忆感到痛苦!;)
9

我遇到过类似的问题,但原因比较简单。我的新虚拟环境里根本没有安装dateutil这个库,而我不知道这个库的正确名字。我试着用 pip install dateutil 来安装,但显然不行,因为这个名字是错的。后来我用 pip install python-dateutil 来安装,结果就成功了(而且不需要用 sudo)。

68

我也遇到过这个问题。我最后找到的简单解决办法是在命令的末尾加上 --upgrade。这样就强制安装了,即使Python认为它已经安装了。这解决了我的问题。

所以如果你也遇到这个问题,可以试试下面的方法:

sudo pip install python-dateutil --upgrade

这样做不会有什么坏处,所以强制重新安装一下是没问题的。

撰写回答