AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1475249
Accepted
Esther
Esther
Asked: 2023-06-29 02:30:56 +0800 CST2023-06-29 02:30:56 +0800 CST 2023-06-29 02:30:56 +0800 CST

Por que o apt depende tanto de versões individuais do Python?

  • 772

Recebemos muitas perguntas aqui sobre pessoas que mexeram com as versões do Python e arruinaram seus sistemas, principalmente sobre o fato de o apt não funcionar corretamente. Estou ciente de que muitos pacotes do Ubuntu requerem versões específicas do Python para funcionar corretamente.

Minha pergunta é: o que torna uma versão mais recente/diferente do Python incompatível com o apt? Esses pacotes dependem de recursos de linguagem que existem apenas em determinadas versões ou de quais recursos específicos do Python apt dependem que o fazem funcionar apenas com uma versão específica do Python?

apt
  • 1 1 respostas
  • 103 Views

1 respostas

  • Voted
  1. Best Answer
    mchid
    2023-06-29T18:53:25+08:002023-06-29T18:53:25+08:00

    Sim, geralmente são recursos de linguagem específicos que existem apenas em uma determinada versão do Python.

    Dependendo do problema, você frequentemente receberá um erro quando um aplicativo como o apt ou, mais provavelmente, o dpkg solicita algo usando a sintaxe errada que não existe na versão mais recente.

    No entanto, o apt em si não depende do python e o mesmo é verdade para o dpkg - mas os pacotes que dependem do python geralmente têm scripts de pré e pós-instalação que invocam scripts python ou python.

    Por exemplo, se você baixar o arquivo deb para software-properties-gtk, extraia esse arquivo e, em seguida, extraia o control.tar.xzarquivo, você verá um prermscript.

    O script é um script sh, mas você pode ver que ele também chama python:

    #!/bin/sh
    set -e
    
    # Automatically added by dh_python3:
    if which py3clean >/dev/null 2>&1; then
        py3clean -p software-properties-gtk 
    else
        dpkg -L software-properties-gtk | perl -ne 's,/([^/]*)\.py$,/__pycache__/\1.*, or next; unlink $_ or die $! foreach glob($_)'
        find /usr/lib/python3/dist-packages/ -type d -name __pycache__ -empty -print0 | xargs --null --no-run-if-empty rmdir
    fi
    
    # End automatically added section
    

    Então py3clean, faz partepython3-minimal e este script é chamado python3no shebang na primeira linha do arquivo, conforme visto nos seguintes comandos:

    which py3clean
    

    e isso deve mostrar /usr/bin/py3cleanassim:

    head /usr/bin/py3clean 
    

    saída:

    #! /usr/bin/python3
    # vim: et ts=4 sw=4
    
    # Copyright © 2010-2012 Piotr Ożarowski <[email protected]>
    #
    # Permission is hereby granted, free of charge, to any person obtaining a copy
    # of this software and associated documentation files (the "Software"), to deal
    # in the Software without restriction, including without limitation the rights
    # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    # copies of the Software, and to permit persons to whom the Software is
    

    Isso é importante porque um arquivo real para /usr/bin/python3não existe, como você pode ver pelo seguinte comando:

    file /usr/bin/python3
    

    Em 20.04, isso me diz que /usr/bin/python3é um link simbólico para python3.8 e which python3.8mostra que esse arquivo é /usr/bin/python3.8. Além disso, file /usr/bin/python3.8confirma que este é o executável Python real usado para python3.

    Portanto, o software-properties-gtkpacote espera que, se o python3 estiver instalado, a versão do python3 instalada seja python3.8.

    O py3cleanscript pode ou não funcionar com uma versão diferente do python, mas geralmente há alterações suficientes no python que provavelmente há pelo menos uma alteração em algum lugar desse script que causaria algum tipo de erro.

    Mesmo que não fosse por esta situação em particular, você entendeu.

    Acho que, para resumir, isso não é realmente um problema com o apt, mas sim um problema de python porque os scripts python geralmente usam um shebang genérico que espera uma versão específica do python quando o shebang especifica ou ou mesmo ou como nenhum /usr/bin/pythondesses /usr/bin/python3aponta /usr/bin/env pythonpara /usr/bin/env python3um arquivo real, todos eles apontam para um link simbólico que aponta para sua versão padrão do python instalada no sistema.

    Como a maioria dos pacotes é lançada para uma versão específica do Ubuntu, todos esperam que a versão padrão do Python seja a mesma. Caso contrário, cada pacote dependeria de uma versão do Python arbitrariamente diferente e podemos acabar com 3 ou mais versões do Python instaladas no mesmo sistema apenas para satisfazer as dependências.

    Normalmente, se você deseja ou precisa de uma versão diferente do Python instalada, é porque você tem um motivo específico. E não há nada que o impeça de usar uma versão diferente do Python por esse motivo, desde que você não mexa com a versão padrão do python que outros softwares usam quando chamam pythonou python3.

    Portanto, se você instalar uma versão alternativa, não terá a conveniência de chamar essa versão alternativa de pythonou python3como sua versão padrão — você precisará especificar a versão especificamente chamando python3.9, por exemplo, ao usá-la.

    Acho que devo adicionar como um aviso para outras pessoas que estão lendo esta resposta. Se você deseja instalar uma versão diferente do python em seu sistema, pergunte para encontrar a maneira correta de fazê-lo. É possível ter várias versões do Python em um sistema, mas para evitar problemas, você não deve desinstalar, alterar ou alterar de forma alguma a versão padrão do Python. Mas não acho que entrar em mais detalhes estaria dentro do escopo desta questão.

    • 2

relate perguntas

  • Como posso ver todas as versões de um pacote que estão disponíveis no arquivo?

  • Como os PPAs podem ser removidos?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve