Python在Ubuntu 14.04(可信)上无法工作 - 无法导入标准库
在服务器上彻底卸载了Python后,我重新安装了python
和python-dev
,但是Python的表现却出现了问题。最明显的错误是我无法从标准库中导入一些模块。比如,我无法导入datetime和encodings模块。
[sloria@osf-staging ~]$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named datetime
>>> import encodings
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named encodings
这导致我无法使用pip、virtualenv等工具。这可能是什么原因呢?
编辑:这是运行dpkg -l | grep python
后的输出:
[sloria@osf-staging python2.7]$ dpkg -l | grep python
ii dh-python 1.20140128-1ubuntu8 all Debian helper tools for packaging Python libraries and applications
ii libpython-dev:amd64 2.7.5-5ubuntu3 amd64 header files and a static library for Python (default)
ii libpython-stdlib:amd64 2.7.5-5ubuntu3 amd64 interactive high-level object-oriented language (default python version)
ii libpython2.7:amd64 2.7.6-8 amd64 Shared Python runtime library (version 2.7)
ii libpython2.7-dev:amd64 2.7.6-8 amd64 Header files and a static library for Python (v2.7)
ii libpython2.7-minimal:amd64 2.7.6-8 amd64 Minimal subset of the Python language (version 2.7)
ii libpython2.7-stdlib:amd64 2.7.6-8 amd64 Interactive high-level object-oriented language (standard library, version 2.7)
ii libpython3-stdlib:amd64 3.4.0-0ubuntu2 amd64 interactive high-level object-oriented language (default python3 version)
rc libpython3.3-minimal:amd64 3.3.2-7ubuntu3.1 amd64 Minimal subset of the Python language (version 3.3)
ii libpython3.4-minimal:amd64 3.4.0-2ubuntu1 amd64 Minimal subset of the Python language (version 3.4)
ii libpython3.4-stdlib:amd64 3.4.0-2ubuntu1 amd64 Interactive high-level object-oriented language (standard library, version 3.4)
ii python 2.7.5-5ubuntu3 amd64 interactive high-level object-oriented language (default version)
ii python-apt 0.9.3.5 amd64 Python interface to libapt-pkg
ii python-apt-common 0.9.3.5 all Python interface to libapt-pkg (locales)
ii python-chardet 2.0.1-2build2 all universal character encoding detector
ii python-colorama 0.2.5-0.1ubuntu1 all Cross-platform colored terminal text in Python - Python 2.x
ii python-dev 2.7.5-5ubuntu3 amd64 header files and a static library for Python (default)
ii python-distlib 0.1.8-1 all low-level components of python distutils2/packaging
ii python-html5lib 0.999-2 all HTML parser/tokenizer based on the WHATWG HTML5 specification (Python 2)
ii python-minimal 2.7.5-5ubuntu3 amd64 minimal subset of the Python language (default version)
ii python-pip 1.5.4-1 all alternative Python package installer
ii python-pkg-resources 3.3-1ubuntu1 all Package Discovery and Resource Access using pkg_resources
ii python-requests 2.2.1-1 all elegant and simple HTTP library for Python, built for human beings
ii python-setuptools 3.3-1ubuntu1 all Python Distutils Enhancements (setuptools compatibility)
ii python-six 1.5.2-1 all Python 2 and 3 compatibility library (Python 2 interface)
rc python-support 1.0.15 all automated rebuilding support for Python modules
rc python-twisted-core 13.2.0-1ubuntu1 all Event-based framework for internet applications
ii python-urllib3 1.7.1-1build1 all HTTP library with thread-safe connection pooling for Python
ii python2.7 2.7.6-8 amd64 Interactive high-level object-oriented language (version 2.7)
ii python2.7-dev 2.7.6-8 amd64 Header files and a static library for Python (v2.7)
ii python2.7-minimal 2.7.6-8 amd64 Minimal subset of the Python language (version 2.7)
ii python3 3.4.0-0ubuntu2 amd64 interactive high-level object-oriented language (default python3 version)
ii python3-apparmor 2.8.95~2430-0ubuntu5 amd64 AppArmor Python3 utility library
ii python3-dbus 1.2.0-2build2 amd64 simple interprocess messaging system (Python 3 interface)
ii python3-gdbm:amd64 3.4.0-0ubuntu1 amd64 GNU dbm database support for Python 3.x
ii python3-gi 3.12.0-1 amd64 Python 3 bindings for gobject-introspection libraries
ii python3-libapparmor 2.8.95~2430-0ubuntu5 amd64 AppArmor library Python3 bindings
ii python3-minimal 3.4.0-0ubuntu2 amd64 minimal subset of the Python language (default python3 version)
ii python3-newt 0.52.15-2ubuntu5 amd64 NEWT module for Python3
ii python3-pkg-resources 3.3-1ubuntu1 all Package Discovery and Resource Access using pkg_resources
ii python3-problem-report 2.14.1-0ubuntu3.2 all Python 3 library to handle problem reports
rc python3.2 3.2.3-6ubuntu3.5 amd64 Interactive high-level object-oriented language (version 3.2)
rc python3.2-minimal 3.2.3-6ubuntu3.5 amd64 Minimal subset of the Python language (version 3.2)
rc python3.3 3.3.2-7ubuntu3.1 amd64 Interactive high-level object-oriented language (version 3.3)
rc python3.3-minimal 3.3.2-7ubuntu3.1 amd64 Minimal subset of the Python language (version 3.3)
ii python3.4 3.4.0-2ubuntu1 amd64 Interactive high-level object-oriented language (version 3.4)
ii python3.4-minimal 3.4.0-2ubuntu1 amd64 Minimal subset of the Python language (version 3.4)
4 个回答
如果你遇到以下错误:
/etc/init.d/apparmor: 35: .: Can't open /lib/apparmor/functions
可以尝试以下方法:(如果不管用可以跳到解决方案)
任务:停止 Apparmor
输入以下命令:
debian/ubuntu
sudo /etc/init.d/apparmor stop
Suse
/etc/init.d/boot.apparmor stop
任务:启动 Apparmor
输入以下命令:
debian/ubuntu
sudo /etc/init.d/apparmor start
Suse
/etc/init.d/boot.apparmor start
任务:重启 Apparmor
输入以下命令:
debian/ubuntu
sudo /etc/init.d/apparmor restart
Suse
/etc/init.d/boot.apparmor restart
任务:查看当前 Apparmor 状态
输入以下命令:
debian/ubuntu
sudo /etc/init.d/apparmor status
Suse
/etc/init.d/boot.apparmor status
具体操作可以参考: http://www.cyberciti.biz/faq/suse-ubuntu-linux-start-stop-restart-apparmor-command/
如果你在使用 AppArmor 时遇到任何问题,首先重新安装你在出现问题前删除的文件,然后再运行这个命令。这样就能解决问题。我在我的 Ubuntu 15.10 上试过,效果很好。
解决方案:
sudo apt-get install --reinstall -u AppArmor
我遇到了和这个问题一样的症状,我是通过重新安装 python3
的 stdlib
来解决的:
apt-get install --reinstall libpython3.4-stdlib
Ubuntu(还有Debian,听说也是这样)默认会自带两个Python包:python
和python-minimal
。我猜你可能是把第一个删掉了,但因为第二个不依赖于第一个,所以你现在还有一个能用的命令行。
顾名思义,python-minimal
是一个非常简化的Python版本,里面包含的库非常有限。你可以运行一些简单的脚本,但功能就不多了。
python-dev
这个包里有编译扩展所需的文件(在用pip安装其他包的时候可能会需要),但它并不替代Python解释器。
要恢复正常,你只需要重新安装完整的Python版本:
$ sudo apt-get install python-2.7
这样做只会把Python装回去,而不会恢复在这个过程中被删掉的其他库。如果你想查看被删掉的内容,可以查看/var/log/apt/history.log
的输出。你会看到类似这样的记录:
Start-Date: 2014-04-21 12:29:19
Commandline: apt-get remove python3.4-dev
Remove: python3.4-dev:amd64 (3.4.0-2ubuntu1), python3-dev:amd64 (3.4.0-0ubuntu2)
End-Date: 2014-04-21 12:29:30
我不知道你为什么会删掉Python,但通常这样做是不太好的。因为有些应用程序依赖于特定的Python版本(以及它们自带的库),这在桌面版本中尤其明显。当然,你可以安装其他版本的Python,只要确保它们不会替代掉主版本就行。
哦,我明白了。我不小心把非管理员用户对C标准库文件的访问权限给禁止了,这是因为我在我的应用程序虚拟环境上执行了 chmod -R 770
命令。其实,在虚拟环境中那些不是纯Python的标准库模块(比如 datetime
模块)会链接回系统Python的 .so
文件。所以,当我改变虚拟环境的权限时,也同时改变了系统Python中对应模块的权限。
因此,我通过运行 chmod -R 775 /path/to/virtualenv
命令解决了这个问题。
[捂脸]