Python无法找到dateutil.relativedelta
我在用 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
我觉得这看起来像是安装包的问题。以下是我想到的一些排查步骤:
- 确认你已经安装了这个包。
- 如果已经安装,检查一下文件是否放在正确的目录里(这个目录需要能被你的Python解释器访问,也就是在PYTHONPATH里。这里有一篇有用的文章点击查看)。
- 检查一下这些文件的权限。
- 如果你在命令行里尝试过导入,重启一下你的命令行窗口。
- 重启你的电脑(哎……我用GNU/Linux已经10年了,但还是对Windows的那些糟糕记忆感到痛苦!;)
9
我遇到过类似的问题,但原因比较简单。我的新虚拟环境里根本没有安装dateutil这个库,而我不知道这个库的正确名字。我试着用 pip install dateutil
来安装,但显然不行,因为这个名字是错的。后来我用 pip install python-dateutil
来安装,结果就成功了(而且不需要用 sudo
)。
68
我也遇到过这个问题。我最后找到的简单解决办法是在命令的末尾加上 --upgrade
。这样就强制安装了,即使Python认为它已经安装了。这解决了我的问题。
所以如果你也遇到这个问题,可以试试下面的方法:
sudo pip install python-dateutil --upgrade
这样做不会有什么坏处,所以强制重新安装一下是没问题的。