ImportError do Python: Nenhum módulo chamado repository

0

Eu tinha três versões do Python instaladas; 2.7, 3.2 e 3.4 Quando eu tinha apenas 2.7 e 3.2, tudo estava bem. Mas depois de instalar o 3.4 manualmente a partir da fonte, as coisas começaram a falhar. 3.4 não tem gi , então eu instalei via pip3 e tudo correu bem.

Após a instalação do 3.4 e do "gi", o repositório desapareceu do 2.7 (estava funcionando antes de instalar o 3.4):

>>> import gi.repository
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named repository

Então, eu reinstalei o python-gi e o repository ainda está faltando. Então, no instinto, eu removi manualmente o python 3.2 e 3.4 simplesmente excluindo os binários de /usr/local e também removendo os diretórios padrão onde eles estavam instalados. O problema ainda persiste. Novamente, observe que o Python encontrou repository finamente antes da instalação do 3.4.

Qualquer correção, por favor?

    
por Kalis 10.04.2015 / 02:22

2 respostas

1

Eu devo admitir uma coisa: eu gosto muito de brincar com python, porque eu uso muito python, e como conseqüência (como somos humanos), nossa brincadeira pode quebrar coisas.

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!

link

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.

    
por user309383 02.04.2018 / 02:55
0

Você precisa das versões dos pacotes do Python 3.

sudo apt-get install python3-gi
    
por Carson Crane 10.04.2015 / 03:35