[Resolvido] No module named pip no QGIS Flatpak
Publicado em Atualizado em
Execute pip pelo Flatpak com --devel e instale com --user. As duas flags têm sua função: --devel troca o runtime pelo SDK, onde o pip realmente está, e --user envia os arquivos para um diretório no qual o sandbox permite escrever.
/usr/bin/python3: No module named pip
bwrap: execvp pip3: No such file or directory
ERROR: Could not install packages due to an EnvironmentError:
[Errno 30] Read-only file system: '/usr/lib/python3.11/site-packages/urllib3-1.25.9.dist-info'
error: runtime/org.kde.Sdk/x86_64/5.15-22.08 not installed
As quatro linhas vêm do mesmo sandbox. Você encontra esses erros no pacote QGIS do Flathub, org.qgis.qgis, em qualquer distribuição Linux, no momento em que um plugin pede um pacote Python que não consegue encontrar e você recorre ao pip como faria em qualquer outra instalação.
A correção rápida
Leia a branch do SDK que seu QGIS Flatpak quer
Execute flatpak info org.qgis.qgis e procure a linha Sdk:. Ela fornece um nome e uma branch, como org.kde.Sdk/x86_64/6.10. Anote a branch. Não copie o número desta página nem da sua mensagem de erro: a branch muda a cada versão do QGIS.
Instale essa branch exata
flatpak install flathub org.kde.Sdk//6.10, usando a branch que você acabou de consultar depois das duas barras. Qualquer outra branch é instalada corretamente e ainda deixa você sem pip.
Instale o pacote
flatpak run --devel --command=pip3 org.qgis.qgis install scipy --user
Troque scipy pelo pacote solicitado pelo seu plugin. Mantenha as duas flags em toda instalação que executar daqui em diante.
Verifique se funcionou
Reinicie o QGIS, abra Plugins, depois Python Console, e digite import scipy. Receber um prompt vazio de volta é o resultado que você quer, porque significa que o QGIS está lendo a pasta na qual você instalou o pacote e que seu plugin também o encontrará ali. Um ModuleNotFoundError significa que os arquivos foram parar em algum lugar que o QGIS nunca consulta, independentemente do que o pip tenha exibido enquanto trabalhava.
Correção 2: os arquivos foram parar fora do caminho de pesquisa do QGIS
Imprima o diretório no qual o pip escreveu:
flatpak run --command=python3 org.qgis.qgis -c "import site; print(site.getusersitepackages())"
Compare-o com sys.path no QGIS Python Console. Se esse diretório não estiver na lista, nada instalado ali jamais será importado, por mais que o pip tenha relatado sucesso corretamente. O log da instalação parece perfeito do início ao fim, e o pacote realmente está no disco, apenas fora do conjunto de pastas que esse Python lê ao iniciar.
Se o erro não mudar, vá para a Correção 3.
Correção 3: o pacote compila extensões C
Você recebe um erro de compilador no meio da instalação, não um erro de Python. O SDK inclui um compilador, mas não todos os headers de desenvolvimento, e você não pode fornecer um de fora do sandbox. Diga ao pip para recusar uma compilação a partir do código-fonte e usar uma wheel pré-compilada:
flatpak run --devel --command=pip3 org.qgis.qgis install scipy --user --only-binary=:all:
Se não existir uma wheel para sua plataforma, procure um pacote que publique uma.
Se o erro não mudar, vá para a Correção 4.
Correção 4: pip3 ainda está ausente mesmo com --devel
A instalação do SDK não foi concluída. Confirme a branch com flatpak list | grep Sdk, depois compile o pip dentro do sandbox como fallback:
flatpak run --command=python3 org.qgis.qgis -m ensurepip --upgrade --user
Trate isso apenas como fallback. Nenhuma fonte recomenda esse procedimento aqui e, sem --devel, ele é executado no runtime Platform, e não no SDK. Depois, volte à etapa 3 da correção rápida.
Se o erro não mudar, vá para a Correção 5.
Correção 5: você não está usando a compilação do Flathub
Verifique com flatpak info org.qgis.qgis. Se esse comando não retornar nada, seu QGIS veio de outro lugar e nenhum dos comandos acima se aplica a ele. O QGIS não oferece um pacote Snap oficial, então uma compilação Snap é de terceiros e tem suas próprias regras de sandbox. No Debian e no Ubuntu, instale pelo repositório oficial do QGIS em vez do Flathub. O QGIS passará a usar o Python do sistema, e as dependências dos plugins serão instaladas com o pip comum.
Se o erro não mudar, envie-o para mim. A seção abaixo informa o que incluir no e-mail.
Por que isso acontece
O Flatpak traz seu próprio Python, isolado daquele instalado pela sua distribuição, então um pacote que você adicionou com o pip do sistema ou com o apt fica invisível para o QGIS. Dentro do sandbox, /usr é montado como somente leitura. Um pip install comum tenta escrever ali, gerando a linha [Errno 30] com o caminho python3.11, e --user envia os mesmos arquivos para um diretório gravável.
O próprio pip fica no SDK, não no runtime que o QGIS inicia normalmente. Sem --devel, não existe pip3 para executar, então a reclamação vem do bwrap, e não do Python. Além disso, --devel só funciona quando o SDK correspondente já está na sua máquina, que é o que a última linha do bloco de erros está informando.
Nosso AI Segmentation plugin identifica um QGIS Flatpak e orienta você a usar o modo Automatic, que é executado em nossos servidores e não instala nenhum pacote Python na sua máquina.
Ainda não funciona?
Envie-me três coisas: a versão do seu QGIS Flatpak obtida com flatpak info org.qgis.qgis, o comando exato que você executou e toda a saída, em vez de apenas a última linha. O endereço é stephane.barbot@terra-lab.ai. Se o pacote que você está tentando instalar foi solicitado pelo nosso AI Segmentation plugin, informe isso no e-mail, porque essa informação muda qual das cinco correções acima verifico primeiro.
Perguntas frequentes
Por que o pip funciona no meu terminal, mas não no QGIS?
O pip do seu terminal pertence ao Python instalado pela sua distribuição. O Flatpak tem o seu próprio Python, e nenhum dos dois consegue enxergar os pacotes do outro, então o apt e o pip do sistema deixam o QGIS exatamente como estava. Toda instalação precisa passar por flatpak run, que é o que a coloca dentro do sandbox.
Preciso usar --devel em toda instalação?
Sim. O pip3 fica no SDK, não no runtime iniciado pelo QGIS, então sem --devel não há nada para executar. Mantenha --user em toda instalação também, ou você voltará a escrever em um /usr somente leitura e receberá novamente a linha [Errno 30].
Onde os pacotes realmente ficam?
No diretório de site do usuário dentro do sandbox, que o comando da Correção 2 imprime para você. Compare esse caminho com sys.path no QGIS Python Console. Arquivos que ficam fora de todas as pastas dessa lista nunca serão importados pelo QGIS.
Existe um Snap oficial do QGIS que eu possa usar?
Não. snapcraft.io/qgis retorna 404, e a compilação na Snap store é de terceiros. A documentação do QGIS lista Flatpak, pacotes da distribuição e Spack, então no Debian ou Ubuntu a alternativa ao Flathub é o repositório oficial do QGIS, não o Snap.
Assim que os imports funcionarem, você poderá voltar aos plugins, e os nossos dois estão no QGIS AI hub. O Windows tem sua própria versão desse problema, documentada em ImportError: DLL load failed while importing _C in QGIS.


