Como Gerenciar Múltiplos Ambientes Virtuais Python em Services no Ubuntu
Gerenciar múltiplos ambientes virtuais Python (venv) em sistemas Ubuntu pode ser uma excelente prática para isolar dependências e manter projetos organizados, especialmente ao usar serviços systemd para iniciar aplicações automaticamente. A seguir, veja como criar, ativar e configurar vários ambientes virtuais Python integrados a serviços do Ubuntu.
Criando e ativando um ambiente virtual Python
Para criar um ambiente virtual, use o comando abaixo, substituindo nome_do_ambiente
pelo nome desejado:
python3 -m venv nome_do_ambiente
Ative o ambiente virtual:
source nome_do_ambiente/bin/activate
Dentro de cada ambiente virtual, será necessário instalar os módulos necessários para o projeto, usando:
pip install pacote_desejado
Instalando módulos dinamicamente no código Python
Uma abordagem para garantir que dependências estejam instaladas é usar um bloco try-except
que instala o módulo caso ele não esteja presente:
import pip
try:
import psutil
except ImportError:
pip.main(['install', '--user', 'psutil'])
import psutil
Desativando o ambiente virtual
Para sair do ambiente virtual, basta executar:
deactivate
Configurando múltiplos services systemd para ambientes virtuais
Você pode criar serviços systemd para iniciar automaticamente seus projetos Python isolados em diferentes ambientes virtuais. Exemplo para dois serviços:
sudo nano /etc/systemd/system/venv1.service
sudo nano /etc/systemd/system/venv2.service
Exemplo de arquivo venv1.service
[Unit]
Description=Venv1 Service
[Service]
User=<usuário>
WorkingDirectory=<caminho_para_diretório_do_projeto_venv1>
ExecStart=<caminho_para_o_virtualenv>/bin/python <caminho_para_arquivo_principal_venv1>
[Install]
WantedBy=multi-user.target
Exemplo de arquivo venv2.service
[Unit]
Description=Venv2 Service
[Service]
User=<usuário>
WorkingDirectory=<caminho_para_diretório_do_projeto_venv2>
ExecStart=<caminho_para_o_virtualenv>/bin/python <caminho_para_arquivo_principal_venv2>
[Install]
WantedBy=multi-user.target
Ativando o serviço para iniciar automaticamente
Para verificar quais serviços estão configurados para iniciar automaticamente:
systemctl list-unit-files --type=service
Para habilitar o seu serviço:
sudo systemctl enable seuservice.service
Considerações finais
Utilizar múltiplos ambientes virtuais isolados, junto com serviços systemd, facilita a administração de diferentes projetos Python em um mesmo servidor Ubuntu, garantindo que cada projeto mantenha suas dependências específicas sem conflito. Lembre-se de ajustar os caminhos de acordo com sua estrutura e permissões de usuário.
Para mais informações sobre venv do Python e systemd services, consulte a documentação oficial.