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 / 1542385
Accepted
user1221647
user1221647
Asked: 2025-02-26 05:20:03 +0800 CST2025-02-26 05:20:03 +0800 CST 2025-02-26 05:20:03 +0800 CST

Qual é a maneira recomendada de provisionar dependências python em contêineres do Ubuntu 24.04

  • 772

Começamos a migrar nossos contêineres docker para a versão 24.04 e recebemos a seguinte recomendação do sistema operacional durante a instalação das dependências do python:

root@76ea3b9e695a:/# pip install numpy
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.

If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.

If you wish to install a non-Debian packaged Python application,
it may be easiest to use pipx install xyz, which will manage a
virtual environment for you. Make sure you have pipx installed.

See /usr/share/doc/python3.12/README.venv for more information.

note: If you believe this is a mistake, please contact your Python installation or OS 
distribution provider. You can override this, at the risk of breaking your Python 
installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

Questões:

  1. Supondo que o python-* não cubra todas as nossas dependências, a abordagem venv é de fato a maneira recomendada para instalar dependências do python em contêineres 24.04 para expor um único ponto de entrada do aplicativo, por exemplo __main__.py?
  2. Quais são os benefícios de usar python-* como dependências? Elas são oferecidas com suporte a vulnerabilidades pelo Ubuntu?
python
  • 1 1 respostas
  • 93 Views

1 respostas

  • Voted
  1. Best Answer
    icezyclon
    2025-03-04T01:28:06+08:002025-03-04T01:28:06+08:00

    TLDR; use venv para projetos (e use uma ferramenta para controlar e resolver suas dependências)

    Tenho certeza de que há várias maneiras de fazer as coisas, mas aqui está meu argumento:

    1. Sim, instalar em um venv é realmente preferível e aqui está o porquê:

      • Ao instalar alguns pacotes com pip e outros com apt, você terá dificuldades em gerenciar builds/dependências determinísticas. Apt e/ou pip podem modificar ou excluir pacotes instalados pelo outro sistema e podem interferir um no outro.
      • O Apt pode atualizar suas versões de pacotes, que podem não ser mais compatíveis com outras dependências que você instalou com o pip (o que você terá que fazer, pois nem todos os pacotes Python estão disponíveis no apt), o que pode quebrar seu aplicativo em uma compilação futura.
      • Instalar pacotes pip no sistema operacional pode danificar outros sistemas operacionais que dependem dos python-*pacotes apt corretos (que podem ser modificados pelo pip).
      • A construção em um venv permite que você copie o ambiente ao usar um dockerfile de vários estágios para reduzir a imagem final (veja o exemplo abaixo).
      • Por fim, gerenciar todas as dependências com um sistema em um venv permite que você controle melhor suas compilações com ferramentas que suportam lockfiles, como uv ou poetry .
    2. Os pacotes apt python-*são principalmente para sistemas operacionais que dependem deles. Os sistemas operacionais são projetados e testados com dependências fornecidas e funcionam bem juntos. Contanto que você se mova apenas para dentro dessas dependências, elas provavelmente funcionarão bem umas com as outras. Esses pacotes são atualizados às vezes, mas provavelmente não conterão todas as novas versões, pois isso exigiria muitos testes para garantir que todos os sistemas operacionais continuem funcionando. Claro, correções de segurança para esses pacotes provavelmente são fornecidas pelos mantenedores do pacote apt, mas, novamente, as atualizações podem ser menos frequentes ou não tão rápidas.


    Exemplo

    Um exemplo de como construir uma compilação determinística do Docker com a ferramenta uv pode ser encontrado aqui . Eu gosto especialmente dessa compilação multiestágio do Docker porque no contêiner em execução, o uv não é necessário, pois apenas o venv é copiado para lá. (Observe que o exemplo aqui na verdade usa o interpretador do sistema em ambas as imagens, então ainda há uma dependência do sistema.)


    Opinião

    Em geral, gerenciar dependências se torna muito mais fácil com uma boa ferramenta. Uv é o mais novo na comunidade Python e eu o uso para praticamente todos os meus novos projetos. Como ele é opinativo e só funciona em venvs, o fluxo de trabalho acima se torna um requisito ao trabalhar com ele.

    Se você tem apenas alguns requisitos para um script simples , então provavelmente é bom instalá-los diretamente sem um venv, é só que esses projetos tendem a crescer e se tornar mais complicados com o tempo. Então sim, faça corretamente da primeira vez ;)

    • 0

relate perguntas

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