Python: 没有找到 datetime 模块?

OS:Ubuntu 14.04 LTS
Python:2.7.6
我的Gourmet Recipe Manager安装突然停止加载。当我在终端窗口运行时,最后的回溯信息如下:
import datetime as dt
ImportError: No module named datetime

就我所知,没有任何变化,我的Python安装是最新的。它昨天突然停止工作了。我非常希望能够找到一个好的方法来诊断和解决这个问题!
更新:感谢所有回复的人!
Tim,如果我在错误的地方提问,我很抱歉。请将其归咎于一个新手只是按照Ubuntu网站上的链接。
TheSchwa,我尝试了你的建议,得到了与上面相同的错误信息。
muru,这个软件包似乎已经安装了,但我不知道是否安装/配置正确。我该如何找出呢?
对于所有的问题,我很抱歉,但我是一个离开Linux已经有一段时间的老RedHat用户。所有的apt/dpkg相关的东西对我来说都是新的。

虽然这个问题在这里是相关的,但你可能会在[so]上获得更好的回答。另外,我无法复现这个问题。在和你相同的设置下没有任何错误出现。 - Tim
如果你在Python解释器中尝试导入datetime会发生什么?你可以通过打开终端并执行python来启动解释器。你可以使用Ctrl+d来退出。 - TheSchwa
根据 dpkg -S $(python -c "import datetime; print datetime.__file__") 的结果,datetime模块来自于libpython2.7-stdlib软件包。该软件包是否已正确安装?您可以尝试重新安装它吗? - muru
好的,具体文件是/usr/lib/python2.7/lib-dynload/datetime.x86_64-linux-gnu.so,你有那个文件吗?另外,在echo $(python -c "import sys; print sys.path")的输出中,你能看到/usr/lib/python2.7/lib-dynload吗?顺便说一下,Stack Exchange系统实际上不会在你编辑帖子时通知评论者;所以最起码要发布一个快速评论,比如“使用信息更新问题”,这样我们就会收到通知,告诉我们要回来检查 :) - TheSchwa
更新了问题并提供了信息。谢谢,TheSchwa!我的答案分别是不和是。现在,我在哪里可以获取datetime.x86_64-linux.gnu.so的新副本? :) - Joe
对于那些还在疑惑的人,可以使用sudo pip install datetime命令进行安装。 - user77510
7个回答

这只是在14.10更新后发生在我身上的事情,似乎是因为我的虚拟环境中有旧版本的/usr/bin/python2.7,与新的二进制文件不同,它们没有内置的datetime,所以当它们无法在磁盘上找到它时会出错。新的解释器似乎可以在没有任何文件I/O的情况下导入它(尝试在strace下运行它来检查)。

我通过激活每个虚拟环境并运行以下命令来修复:

$ cp /usr/bin/python2.7 $(which python2.7)

6谢谢,但这为什么是必要的?在升级时破坏Python是非常糟糕的事情。 - Samantha Atkins
2我尝试了这页上的其他答案,它们都不起作用,但是这个答案确实有效。 - Michael Terry
2收到 cp: '/usr/bin/python2.7' 和 '/usr/bin/python2.7' 是同一个文件 的错误提示,但问题仍然存在。 - Umair Ayub
@Umair,你的activate脚本可能有问题,在这种情况下——通常,在激活后,which python2.7会显示环境Python的路径,而不是返回系统Python的路径。 - Brandon Rhodes
这也适用于virtualenv安装。 - josircg

你可以通过以下方式重新初始化virtualenv:
cd $VIRTUAL_ENV
virtualenv .

2请注意,应该使用 virtualenv . 而不是 virtualenv ,. - icyrock.com
4这个答案似乎比Brandon Rhodes的更好。 - Tim
如果使用virtualenvwrapper,可以执行cd $VIRTUAL_ENV - maciek
OSError: [Errno 1] Operation not permitted - Cerin
@Cerin,我遇到了同样的问题,我只是使用了sudo virtualenv .来安装新的Python可执行文件,然后将整个$VIRTUAL_ENV更改回正确的目录所有者。 - iMitwe


10为了使其正常工作,我还需要执行rm -rf /opt/eff.org - CharlyDelta
7移除 /opt/eff.org 修复了它。 - Margus Pala
1对我来说也一样... /opt/eff.org - cljk

我遇到了同样的问题,最后决定是因为AWS CLI的原因,因为我注意到它有自己的Python目录。所以我卸载了AWS CLI并重新安装,问题就解决了:
sudo pip uninstall awscli
sudo pip install awscli

我发现在14.04版本中有一些变化,所以你需要以root权限进行以下操作:
仅针对日期和时间:

ln -s /usr/lib/python2.7/lib-dynload/datetime.x86_64-linux-gnu.so                      /usr/lib/python2.7/lib-dynload/datetime.so

对于所有模块:

ln -s /usr/lib/python2.7/lib-dynload/audioop.x86_64-linux-gnu.so                       /usr/lib/python2.7/lib-dynload/audioop.so
ln -s /usr/lib/python2.7/lib-dynload/_bsddb.x86_64-linux-gnu.so                        /usr/lib/python2.7/lib-dynload/_bsddb.so
ln -s /usr/lib/python2.7/lib-dynload/bz2.x86_64-linux-gnu.so                           /usr/lib/python2.7/lib-dynload/bz2.so
ln -s /usr/lib/python2.7/lib-dynload/_codecs_cn.x86_64-linux-gnu.so                    /usr/lib/python2.7/lib-dynload/_codecs_cn.so
ln -s /usr/lib/python2.7/lib-dynload/_codecs_hk.x86_64-linux-gnu.so                    /usr/lib/python2.7/lib-dynload/_codecs_hk.so
ln -s /usr/lib/python2.7/lib-dynload/_codecs_iso2022.x86_64-linux-gnu.so               /usr/lib/python2.7/lib-dynload/_codecs_iso2022.so
ln -s /usr/lib/python2.7/lib-dynload/_codecs_jp.x86_64-linux-gnu.so                    /usr/lib/python2.7/lib-dynload/_codecs_jp.so
ln -s /usr/lib/python2.7/lib-dynload/_codecs_kr.x86_64-linux-gnu.so                    /usr/lib/python2.7/lib-dynload/_codecs_kr.so
ln -s /usr/lib/python2.7/lib-dynload/_codecs_tw.x86_64-linux-gnu.so                    /usr/lib/python2.7/lib-dynload/_codecs_tw.so
ln -s /usr/lib/python2.7/lib-dynload/crypt.x86_64-linux-gnu.so                         /usr/lib/python2.7/lib-dynload/crypt.so
ln -s /usr/lib/python2.7/lib-dynload/_csv.x86_64-linux-gnu.so                          /usr/lib/python2.7/lib-dynload/_csv.so
ln -s /usr/lib/python2.7/lib-dynload/_ctypes_test.x86_64-linux-gnu.so                  /usr/lib/python2.7/lib-dynload/_ctypes_test.so
ln -s /usr/lib/python2.7/lib-dynload/_ctypes.x86_64-linux-gnu.so                       /usr/lib/python2.7/lib-dynload/_ctypes.so
ln -s /usr/lib/python2.7/lib-dynload/_curses_panel.x86_64-linux-gnu.so                 /usr/lib/python2.7/lib-dynload/_curses_panel.so
ln -s /usr/lib/python2.7/lib-dynload/_curses.x86_64-linux-gnu.so                       /usr/lib/python2.7/lib-dynload/_curses.so
ln -s /usr/lib/python2.7/lib-dynload/datetime.x86_64-linux-gnu.so                      /usr/lib/python2.7/lib-dynload/datetime.so
ln -s /usr/lib/python2.7/lib-dynload/dbm.x86_64-linux-gnu.so                           /usr/lib/python2.7/lib-dynload/dbm.so
ln -s /usr/lib/python2.7/lib-dynload/_elementtree.x86_64-linux-gnu.so                  /usr/lib/python2.7/lib-dynload/_elementtree.so
ln -s /usr/lib/python2.7/lib-dynload/fpectl.x86_64-linux-gnu.so                        /usr/lib/python2.7/lib-dynload/fpectl.so
ln -s /usr/lib/python2.7/lib-dynload/future_builtins.x86_64-linux-gnu.so               /usr/lib/python2.7/lib-dynload/future_builtins.so
ln -s /usr/lib/python2.7/lib-dynload/_hashlib.x86_64-linux-gnu.so                      /usr/lib/python2.7/lib-dynload/_hashlib.so
ln -s /usr/lib/python2.7/lib-dynload/_hotshot.x86_64-linux-gnu.so                      /usr/lib/python2.7/lib-dynload/_hotshot.so
ln -s /usr/lib/python2.7/lib-dynload/_json.x86_64-linux-gnu.so                         /usr/lib/python2.7/lib-dynload/_json.so
ln -s /usr/lib/python2.7/lib-dynload/linuxaudiodev.x86_64-linux-gnu.so                 /usr/lib/python2.7/lib-dynload/linuxaudiodev.so
ln -s /usr/lib/python2.7/lib-dynload/_lsprof.x86_64-linux-gnu.so                       /usr/lib/python2.7/lib-dynload/_lsprof.so
ln -s /usr/lib/python2.7/lib-dynload/mmap.x86_64-linux-gnu.so                          /usr/lib/python2.7/lib-dynload/mmap.so
ln -s /usr/lib/python2.7/lib-dynload/_multibytecodec.x86_64-linux-gnu.so               /usr/lib/python2.7/lib-dynload/_multibytecodec.so
ln -s /usr/lib/python2.7/lib-dynload/_multiprocessing.x86_64-linux-gnu.so              /usr/lib/python2.7/lib-dynload/_multiprocessing.so
ln -s /usr/lib/python2.7/lib-dynload/nis.x86_64-linux-gnu.so                           /usr/lib/python2.7/lib-dynload/nis.so
ln -s /usr/lib/python2.7/lib-dynload/ossaudiodev.x86_64-linux-gnu.so                   /usr/lib/python2.7/lib-dynload/ossaudiodev.so
ln -s /usr/lib/python2.7/lib-dynload/parser.x86_64-linux-gnu.so                        /usr/lib/python2.7/lib-dynload/parser.so
ln -s /usr/lib/python2.7/lib-dynload/pyexpat.x86_64-linux-gnu.so                       /usr/lib/python2.7/lib-dynload/pyexpat.so
ln -s /usr/lib/python2.7/lib-dynload/readline.x86_64-linux-gnu.so                      /usr/lib/python2.7/lib-dynload/readline.so
ln -s /usr/lib/python2.7/lib-dynload/resource.x86_64-linux-gnu.so                      /usr/lib/python2.7/lib-dynload/resource.so
ln -s /usr/lib/python2.7/lib-dynload/_sqlite3.x86_64-linux-gnu.so                      /usr/lib/python2.7/lib-dynload/_sqlite3.so
ln -s /usr/lib/python2.7/lib-dynload/_ssl.x86_64-linux-gnu.so                          /usr/lib/python2.7/lib-dynload/_ssl.so
ln -s /usr/lib/python2.7/lib-dynload/termios.x86_64-linux-gnu.so                       /usr/lib/python2.7/lib-dynload/termios.so
ln -s /usr/lib/python2.7/lib-dynload/_testcapi.x86_64-linux-gnu.so                     /usr/lib/python2.7/lib-dynload/_testcapi.so

此外,如果您使用虚拟环境副本。
cp $(which python2.7) /opt/graphite/bin/python

到你的环境。


3我升级到了14.04版本,而且没有必要进行任何符号链接操作。你能提供一些证据来证明像这样搞乱系统库是必要的,而且无法避免吗? - Andrea Lazzarotto

这是在一些Ubuntu升级后发生的。我最喜欢的解决方案是

$ virtualenv --no-site-packages path/to/virtualenv/dir

这将更新所有所需的内容,而不会删除已安装的软件包。
如果您有许多虚拟环境需要更新,可以使用 xargs 命令。
$ ls ~/directory/with/virtualenvs | xargs -L1 virtualenv --no-site-packages

我在从Ubuntu 14.04升级到14.10时遇到了错误。我重新创建了我的虚拟环境,问题就解决了。所以,如果你正在使用虚拟环境,请重新创建它。
然而,如果你没有使用虚拟环境,我想重新安装你的项目可能会起作用。不要触碰任何系统库!这样暂时可能能解决问题,但潜在地会导致其他问题。