升级到14.04后Python无法正确导入
我无法从标准库中导入带有C扩展的模块。这是在我把系统从Ubuntu 12.04升级到14.04之后发生的。我尝试重新安装了python和python-dev,但还是没用。我注意到其他人也有类似的问题,但他们都是在使用虚拟环境,而我根本没有使用虚拟环境。
Python 2.7.3 (default, Aug 1 2012, 05:16:07)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pickle, email, json, readline, socket, turtle
>>> import ctypes
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/ctypes/__init__.py", line 10, in <module>
from _ctypes import Union, Structure, Array
ImportError: No module named _ctypes
>>> import io
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/io.py", line 51, in <module>
import _io
ImportError: No module named _io
>>> import datetime
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named datetime
5 个回答
可能你的路径设置不正确。
可以试着看看:
import sys
sys.path
可能是因为Python的路径没有设置好,所以它无法导入模块。
如果路径不在那儿,可以把它添加到列表里,作为一个新的元素。
sys.path.append(new path)
希望这些能帮到你。
根据你的评论,看到你输入 which python
后返回 /usr/local/lib/python
,这说明你在本地安装了一个Python版本,这个版本和你系统自带的Python不一样。在Ubuntu系统中,系统自带的软件包通常不会安装在 /usr/local
这个地方。把自己安装的Python和系统提供的库混在一起(就像你错误信息中的 /usr/lib
路径所显示的那样)可能会引发各种问题。
我建议你删除在 /usr/local/lib
中安装的Python(这个地方安装二进制文件确实有点奇怪),或者把它从你的PATH中移除,这样你就可以使用系统自带的Python了。
如果你遇到“No module named _ctypes”的错误,可以试试这个方法:
apt-get install libffi-dev
希望这个方法能帮到你。
如果你在使用虚拟环境(virtualenv),在升级过程中可能会出现问题。你可以通过简单地运行下面的命令来修复它。
virtualenv /PATH/TO/EXISTING/ENVIRONMENT
或者你也可以使用下面的命令。
virtualenv --system-site-packages /PATH/TO/EXISTING/ENVIRONMENT
通过运行 which -a python
这个命令,我们发现系统里有两个 Python 2 的安装位置,一个在 /usr/local/lib/python
,另一个在 /usr/bin/python/
。所以,如果我们把 /usr/local/lib/python
这个位置的 Python 删除掉,就能解决这个问题。