Python卸载困境

时间:2017-08-20 08:23:09

标签: python ubuntu ctypes

我正在设置我的第一个Python包,如here所述,似乎有必要完成Python 2.7.13。我没有意识到Python 2.7.12对于Ubuntu的健康状况是多么完整,我将2.7.12 dirs(/usr/local/lib/python2.7/)移动到备用dirs并用2.7.13 dirs替换它们并删除了python3。这导致了一系列问题,最终杀死了我的桌面(没有发射器,没有alt-t终端),经过漫长的战斗,我需要将alt-F1转换为非GUI终端,撤消目录交换,并详细解释{{ 3}}之后

sudo apt-get install --reinstall python2.7
sudo apt-get install python3-all

sudo apt-get install ubuntu-desktop
事情现在几乎正常了,除非我因为缺乏ctypes而无法重新安装pip(使用ipython等)。我愿意重新安装Ubuntu,但前提是我必须这样做。

jeremy@jr:~$ python 
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/ctypes/__init__.py", line 7, in <module>
    from _ctypes import Union, Structure, Array
ImportError: No module named _ctypes

据我所知,目前的情况如何检查:

jeremy@jr:~$ echo $PYTHONHOME
/usr/local/lib/python2.7:/usr/local/lib/python2.7.12
jeremy@jr:~$ echo $PYTHONPATH
/usr/local/lib/python2.7:/usr/local/lib/python2.7.12:/usr/local/lib/python2.7/site-packages:/home/jeremy/sw/caffe/python:/home/jeremy/sw/models/slim:/home/jeremy/sw/models:/home/jeremy/sw/models/utils:
jeremy@jr:~$ which python 
/usr/bin/python
jeremy@jr:~$ ls -l /usr/bin/python*
lrwxrwxrwx 1 root root      16 Aug 17 23:37 /usr/bin/python -> /usr/bin/python2
lrwxrwxrwx 1 root root       9 Dec 10  2015 /usr/bin/python2 -> python2.7
-rwxr-xr-x 1 root root 3546104 Nov 19  2016 /usr/bin/python2.7
lrwxrwxrwx 1 root root      33 Nov 19  2016 /usr/bin/python2.7-config -> x86_64-linux-gnu-python2.7-config
lrwxrwxrwx 1 root root      16 Dec 10  2015 /usr/bin/python2-config -> python2.7-config
lrwxrwxrwx 1 root root       9 Mar 23  2016 /usr/bin/python3 -> python3.5
-rwxr-xr-x 2 root root 4460336 Nov 17  2016 /usr/bin/python3.5
-rwxr-xr-x 2 root root 4460336 Nov 17  2016 /usr/bin/python3.5m
lrwxrwxrwx 1 root root      10 Mar 23  2016 /usr/bin/python3m -> python3.5m
lrwxrwxrwx 1 root root      16 Dec 10  2015 /usr/bin/python-config -> python2.7-config

/usr/local/lib/python2.7看起来很好,有一堆来自_abcoll.py和zipfile.pyc的脚本。

pip也被打破了,给出了错误

jeremy@jr:/usr/src/Python-2.7.12$ pip install ctypes
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 5, in <module>
    from pkg_resources import load_entry_point
ImportError: No module named pkg_resources

哪个

jeremy@jr:/usr/src/Python-2.7.12$ sudo apt-get install --reinstall python-pkg-resources

无法修复(重新安装后出现上述错误)

问题是,我如何修复我看似有点破损的python安装,修复ctypes,pip和其他任何可能丢失的部分?

jeremy@jr:~$ ls /usr/local/lib/python2.7/ctypes/
_endian.py  _endian.pyc  __init__.py  __init__.pyc  macholib  test  util.py  util.pyc  wintypes.py  wintypes.pyc

2 个答案:

答案 0 :(得分:0)

您已经重新安装了其中一个包含/ usr / lib / python的软件包,但不是全部。 ctypes特别是在libpython2.7-stdlib中。您可以向包管理员询问那里有什么,并重新安装所有内容(如前面的可怕组合):

sudo apt-get install --reinstall `dpkg -S /usr/lib/python2.7 | sed -e 's%: /usr/lib/python2.7%%' -e 's%, % %g'`

一般情况下,如果没有包管理员的帮助,请不要修改/ usr等系统目录。它弄乱了系统对于那里有没有什么的想法。您自己的安装有路径,例如/ opt和/ usr / local。在这种情况下,你似乎很幸运,即使仍然有效。

另外,我发现你不太可能需要专门的2.7.13超过2.7.12;更可能是另一部分,例如python-setuptools或python2.7-dev。 Ubuntu从Debian继承了Python系统相当精细的分割。

可以使用apt pin特定包来替换源。例如,很可能将Ubuntu Xenial与Zesty的Python软件包混合使用,得到2.7.13。

答案 1 :(得分:0)

解决了,通过取消设置$ PYTHONPATH - 来自某些提示here关于ubuntu的默认python和'vanilla python'之间的差异,似乎设置$ PYTHONPATH是允许python运行的唯一方式

export PYTHONPATH=/usr/local/lib/python2.7:/usr/local/lib/python2.7/dist-packages

(/ usr / local / lib而不是/ usr / lib)我实际上也阻止了vanilla python的运行。

在取消设置PYTHONPATH之前的

sys.path:

/usr/local/lib/python2.7
/usr/local/lib/python2.7/dist-packages
/usr/local/lib/python2.7/site-packages
/usr/local/lib/python2.7/lib/python2.7
/usr/local/lib/python2.7/lib/python2.7/plat-x86_64-linux-gnu
/usr/local/lib/python2.7/lib/python2.7/lib-tk
/usr/local/lib/python2.7/lib/python2.7/lib-old
/usr/local/lib/python2.7/lib/python2.7/lib-dynloa
取消设置PYTHONPATH后的

sys.path:

>>> print('\n'.join(sys.path))

/usr/local/lib/python2.7/dist-packages/stevedore-1.15.0-py2.7.egg
/usr/local/lib/python2.7/dist-packages/enum34-1.1.6-py2.7.egg
/usr/local/lib/python2.7/dist-packages/pbr-1.10.0-py2.7.egg
/usr/local/lib/python2.7/dist-packages/PIMS-0.3.3+105.g1040b5f-py2.7.egg
/usr/local/lib/python2.7/dist-packages/slicerator-0.9.8-py2.7.egg
/usr/local/lib/python2.7/dist-packages/pip-9.0.1-py2.7.egg
/usr/lib/python2.7
/usr/lib/python2.7/plat-x86_64-linux-gnu
/usr/lib/python2.7/lib-tk
/usr/lib/python2.7/lib-old
/usr/lib/python2.7/lib-dynload
/usr/local/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages/gtk-2.0
/usr/lib/pymodules/python2.7
/usr/lib/python2.7/dist-packages/ubuntu-sso-client 

执行未设置的PYTHONPATH解决了问题(当然,在重建桌面之后的所有其他步骤,特别是:

sudo apt-get remove ubuntu-desktop
sudo apt-get install ubuntu-desktop
sudo apt-get install --reinstall python2.7