2017-08-20 4 views
-1

Je configurais mon premier paquet Python comme décrit here et il semblait nécessaire de terminer Python 2.7.13. Ne réalisant pas comment l'intégrale de Python 2.7.12 était à la santé d'Ubuntu, j'ai déplacé 2.7.12 dirs (/usr/local/lib/python2.7/) pour sauvegarder les dirs et les ai remplacés par 2.7.13 dirs et ai enlevé python3. Cela a conduit à une série de problèmes qui ont finalement tué mon bureau (pas de lanceur, pas de terminal alt-t) qui après une longue bataille m'a obligé à alt-F1 dans un terminal non-GUI, annuler les échanges de répertoires, et comme détaillé herePython désinstallation woes

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

et

sudo apt-get install ubuntu-desktop 

choses sont maintenant presque normale sauf que je ne peux pas réinstaller pip (utiliser ipython entre autres) en raison d'un ctypes manquant. Je suis prêt à réinstaller Ubuntu mais seulement si je le dois vraiment.

[email protected]:~$ 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 

L'état actuel des choses, autant que je sais comment vérifier:

[email protected]:~$ echo $PYTHONHOME 
/usr/local/lib/python2.7:/usr/local/lib/python2.7.12 
[email protected]:~$ 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: 
[email protected]:~$ which python 
/usr/bin/python 
[email protected]:~$ 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 semble correct, avec un tas de scripts de _abcoll.py à zipfile.pyc.

pip est également cassé, donnant l'erreur

[email protected]:/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 

qui

[email protected]:/usr/src/Python-2.7.12$ sudo apt-get install --reinstall python-pkg-resources 

ne fixe pas (même erreur se produit ci-dessus après réinstallent)

La question est, comment puis-je résoudre mon installation de python apparemment un peu cassée, pour réparer les ctypes, pip, et d'autres parties potentiellement manquantes?

[email protected]:~$ 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 
+0

Pourquoi ne pas déballer directement les fichiers du paquet dans le système de fichiers? Je l'ai fait à quelques reprises lors de la récupération de la corruption sévère. Jamais eu un seul problème après cela. – user1643723

+0

@coldspeed, la question est, comment résoudre le problème ctypes et les autres qui peuvent se cacher –

+0

@ user1643723, pouvez-vous me renseigner sur la façon de le faire? –

Répondre

0

Vous avez réinstallé l'un des paquets qui ont des choses dans/usr/lib/python, mais pas tous. ctypes en particulier est dans libpython2.7-stdlib. Vous pouvez demander au gestionnaire de paquets ce qui était là et réinstaller tout cela avec quelque chose comme (combinaison effrayante avant):

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

En général, ne vont pas modifier les répertoires système comme/usr sans l'aide du gestionnaire de paquets. Cela bousille l'idée du système de ce qu'il y a ou non. Il existe des chemins pour vos propres installations, comme/opt et/usr/local. Dans ce cas, il semble que vous ayez de la chance même de travailler.

En outre, je trouve plutôt improbable que vous avez spécifiquement besoin de 2.7.13 sur 2.7.12; plus probablement c'était une autre partie, comme python-setuptools ou python2.7-dev. Ubuntu hérite d'une répartition plutôt fine du système Python de Debian.

Il est possible avec apt de pin paquets particuliers à d'autres sources. Par exemple, il est probablement possible d'avoir un hybride d'Ubuntu Xenial avec des paquets Python de Zesty pour obtenir 2.7.13.

+0

"Dans ce cas, il semble que vous ayez de la chance même de fonctionner", - apt est plutôt robuste et n'a pas de dépendances directes sur les paquets python. Maintenant, si le problème en question est arrivé sur Gentoo, où le gestionnaire de paquets lui-même est écrit en Python ... – user1643723

+0

Merci @yann mais après l'installation apt-get de: (python-setuptools python-pyorbit python-gnome2 python-gi python-wheel python2.7 python-pkg-resources python-pip lsb-release python-tk python-tz unity-lens-photos gir1.2-accounts-1.0), l'erreur ctypes se produit encore –

+0

Je m'attendais à ce que cette liste comprenne libpython2 .7-stdlib qui contient des ctypes dans Debian. Bien sûr, il existe un ensemble similaire pour Python 3. En ce qui concerne apt, habituellement apt fonctionne (si nécessaire, on peut faire tout apt et dpkg fonctionne avec gzip, tar et ar) mais il peut facilement rester bloqué sur un paquet particulier ne configurant pas correctement et tel. –

0

résolu, par MHS $ PYTHONPATH - de quelques conseils here sur les différences entre le python par défaut ubuntu et « python vanille », il semble que d'avoir mis PYTHONPATH $ de la seule façon qui permettait à python pour exécuter

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

(/ usr/local/lib et non/usr/lib) En fait, blv empêchait aussi le python vanilla de fonctionner.

sys.path avant unset PYTHONPATH:

/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 

sys.path après unset PYTHONPATH:

>>> 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 

Faire la PYTHONPATH unset a résolu le problème (après bien sûr toutes les autres étapes de reconstruction bureau en particulier:

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

)