Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python不能在Ubuntu 14.04上运行(可靠)-可以';导入标准库_Python_Ubuntu - Fatal编程技术网

Python不能在Ubuntu 14.04上运行(可靠)-可以';导入标准库

Python不能在Ubuntu 14.04上运行(可靠)-可以';导入标准库,python,ubuntu,Python,Ubuntu,在服务器上完全卸载python并重新安装python和pythondev之后,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

在服务器上完全卸载python并重新安装
python
pythondev
之后,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
Ubuntu(我可以说是Debian)默认附带了两个python包:
python
pythonmiminal
。我猜发生的事情是你删除了第一个,但是第二个不依赖于它,你仍然有一个不知怎么工作的提示

顾名思义,这是一个非常简单的python版本,包含的库数量非常有限。您应该能够运行一些简单的脚本,但仅此而已

pythondev
包包含编译扩展所需的文件(从pip安装包时可能需要它),但不替换解释器

要回到正轨,只需再次安装“完整”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版本,只需确保它们不会取代主版本。

啊,我想出来了。我在应用程序的虚拟环境中调用
chmod-R 770
,无意中禁止非root用户访问C标准库文件。事实证明,虚拟环境中非纯Python的标准库模块(例如
datetime
module)符号链接回系统Python的
.so
文件。因此,更改虚拟环境上的权限也会更改系统中相应模块的权限

因此,我可以通过运行
chmod-R 775/path/to/virtualenv
来解决这个问题


[facepalm]

我有一个相同症状的问题,我通过重新安装
python3
stdlib
解决了这个问题:

apt-get install --reinstall libpython3.4-stdlib

如果出现以下错误:

 /etc/init.d/apparmor: 35: .: Can't open /lib/apparmor/functions
尝试以下操作:(如果不起作用,请跳到解决方案) 任务:停止安装

键入以下命令:

debian/ubuntu 苏塞 任务:启动Apparmor

键入以下命令:

debian/ubuntu 苏塞 任务:重新启动Apparmor

键入以下命令:

debian/ubuntu 苏塞 任务:查看当前的Apparmor状态

键入以下命令:

debian/ubuntu 苏塞 按照以下指示:

如果您碰巧遇到AppArmor的任何问题,请首先重新安装出现问题之前清除/卸载的文件,然后运行此命令。它会解决这个问题。它在我的Ubuntu 15.10上运行

解决方案:
显示
dpkg-l | grep python
的输出python开发包通常只包含构建C扩展所需的内容,而不是python本身。如果你“卸载了python”,你甚至还会有一个解释器,这真是令人惊讶。我重新安装了python2.7,但仍然会出现同样的错误。我首先卸载python的唯一原因是因为我遇到了这些导入错误。
dpkg--get selections | grep python
的输出是什么。如果输出非常长,则可以使用类似的方法
 /etc/init.d/apparmor: 35: .: Can't open /lib/apparmor/functions
 sudo /etc/init.d/apparmor stop
 /etc/init.d/boot.apparmor stop
 sudo /etc/init.d/apparmor start
 /etc/init.d/boot.apparmor start
 sudo /etc/init.d/apparmor restart
  /etc/init.d/boot.apparmor restart
 sudo /etc/init.d/apparmor status
 /etc/init.d/boot.apparmor status
  sudo apt-get install --reinstall -u AppArmor