Então eu cheguei a este problema simplesmente querendo instalar um novo software no meu Ubuntu (14.04 provavelmente irrelevante para essa causa). Eu começo 'Ubunty Software Center' e nada acontece.
Após uma investigação de onde esta peça começa, eu aprendo que ela pode ser chamada a partir da linha de comando como:
$ software-center
Traceback (most recent call last):
File "/usr/bin/software-center", line 25, in <module>
from gi.repository import Gtk, GObject
ImportError: No module named repository
Nossa. Eu estou em sapatos parecidos com você. Como diabos eu acabei nessa situação para quebrar uma ferramenta de sistema? É claro que é desnecessário dizer que eu tenho numerosas instalações diferentes de python (ambas 2 e 3 e depois algumas outras), então o que o centro de software espera executar?
$ more /usr/bin/software-center
#! /usr/bin/python
# Copyright (C) 2009-2011 Canonical
#
# Authors:
# Michael Vogt
la la la...
ok, é /usr/bin/python
. Vamos ver:
$ /usr/bin/python --version
Python 2.7.12
para ser honesto, eu esperava uma versão menor, mas está tudo bem (espero). Então, por que não consigo encontrar o gi.repository?
$ /usr/bin/python
Python 2.7.12 (default, Jan 9 2017, 12:16:27)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import gi.repository
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named repository
>>> import gi
>>> import gi.repository
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named repository
Gi carrega, mas não tem repositório. Este é o enigma que me levou muitas perguntas e respostas sobre estouro de pilha. Muitas dicas aqui e ali, instalei isto, instalei isso, tentei isso & amp; que, incluindo a reinstalação de módulos, mesmo python padrão usando o apt-get e reinstalar esquerda e direita este e aquele módulo. Mas o problema era teimoso, ele insistia em não encontrar o repositório, não importando o que eu tentei de várias receitas em diferentes respostas.
Em suma - NADA do que funcionou .
Eu fiz uma pausa para pensar em como abordar o problema. Depois de um tempo chego a uma pergunta:
Como sei qual biblioteca estou carregando? Importar em Python é muito bem documentado (embora um pouco superficialmente). Falta uma documentação mais profunda que possa ajudá-lo a navegar. Estava pensando em corrigir o problema via PYTHONPATH. Mas então ...
Por um golpe de sorte eu acho que segue uma boa parte da escrita. Não posso agradecer o suficiente para este artigo, pois deu dicas essenciais onde procurar o problema. Leia com atenção!
Lee, você é meu herói!
Seguindo as dicas do artigo de Lee, analiso quais caminhos são examinados:
>>> import sys
>>> print '\n'.join(sys.path)
/usr/local/lib/python2.7/dist-packages/gi-1.2-py2.7.egg
/usr/lib/python2.7/dist-packages
/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
... la la la ...
ei, o que o /usr/local/lib/python2.7/dist-packages/gi-1.2-py2.7.egg
faz nessa lista? Não é suposto carregar bibliotecas de /usr/lib/python2.7/
not /usr/local/lib/python2.7/
que é totalmente diferente instalação e versão do Python?!?! Eu devo ter mexido em alguma coisa em algum momento.
Sabendo de outras dicas que o 'gi' não é normalmente instalado via pip (mas via apt-get install python-gi
) e lembro que entre outras coisas instalei o gi para resolver este problema (que não teve sucesso de cada vez). Não é que a leitura de outras dicas e idéias não ajudasse - eles acrescentaram mordidinhas aqui e ali e lançaram alguma luz sobre um problema.
Eu tive uma ideia: E se eu simplesmente desinstalar esse 'gi'? Talvez os caminhos voltassem ao normal. No entanto, tenho que ter certeza de que estou atingindo pip direita (não um da linha de comando). Para garantir que (exit () do python) execute o módulo pip em vez do próprio pip (o que o pip faz para encontrar as coisas? Isso ainda não foi respondido).
$ sudo /usr/bin/python -m pip uninstall gi
Uninstalling gi:
/usr/local/lib/python2.7/dist-packages/gi-1.2-py2.7.egg
Proceed (y/n)? y
Successfully uninstalled gi
Legal. Mesmo que o python tente carregar o gi, ele não o encontrará em /usr/local/lib/python2.7/dist-packages/
como resultado:
$ /usr/bin/python
Python 2.7.12 (default, Jan 9 2017, 12:16:27)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print '\n'.join(sys.path)
/usr/lib/python2.7/dist-packages
/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
/home/user/.local/lib/python2.7/site-packages
/usr/local/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages/PILcompat
/usr/lib/python2.7/dist-packages/gst-0.10
/usr/lib/python2.7/dist-packages/gtk-2.0
/usr/lib/pymodules/python2.7
/usr/lib/python2.7/dist-packages/ubuntu-sso-client
/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode
Que legal :) Vamos tentar agora:
$ software-center
Voila! Está funcionando!!! Yeee !!!
Agora, a moral da história:
Nem sempre é o que você não instalou (porque você acredita que está faltando), mas algo que você instalou extra e será melhor ser removido.
Espero que isso ajude alguém.