Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Bug] script nao ativa o ambiente virtual

oi, pessoal!

estou com problema em uma etapa do treinamento "Scripting: automação de tarefas com Python e criação de Pipelines no Jenkins".

o script para automatizar o ambiente virtual e instalar as dependencias do projeto git, nao esta executando como esperado.

o script esta assim:

import os # fornece a interacao com sistema operacional, permite realizar tarefas como, manipulacao de arquivos e diretorios, acesso a informacao do sistema e execucao de comandos do sistema.
import subprocess # permite a execucao de outros programas a partir do seu script Python. Util para automatizar tarefas, interagir com outros programas e gerenciar processos.
import sys # fornece acesso a algumas variáveis e funções que descrevem o ambiente do interpretador Python, como argumentos de linha de comando, caminhos, saida padrao e de erro e sair do interpretador

def criar_ambiente_virtual(diretorio_projeto):
    if not os.path.exists(diretorio_projeto): # verificar se o caminho e valido
        print(f"O diretorio {diretorio_projeto} nao existe") # retorno ao usuario informando que diretorio nao existe
        return

    venv_path = os.path.join(diretorio_projeto, "venv") # une o caminho do diretorio do projeto e o diretorio do ambiente virtual

    if os.path.exists(venv_path): # verifica se a variavel venv_path ja tem o ambiente virtual criado
        print("O ambiente virtual ja existe") # retorno ao usuario que a criacao do ambiente virtual nao foi concluida, porque ela ja existe
        return

    try: # tentativa de criacao de ambiente
        subprocess.run(["virtualenv", venv_path], check=True) # executa o comando "virtualenv" junto com a variavel venv_path para criar ambiente virtual
        print("Ambiente virtual criado com exito") # caso a criacao seja criado com exito, retornara a mensagem ao usuario
    except subprocess.CalledProcessError as e: # indica para usuario que ocorreu erro e mostrar o(s) possivel(is) erro(s):
        print(f"Erro ao criar o ambiente virtual: {e}") # retornando ao usuario sobre o erro, identificando com o {e}

def instalar_dependencias(diretorio_projeto, requirements_file):
    if not os.path.exists(requirements_file): # verifica se o arquivo requirements.txt existe
        print(f"O arquivo '{requirements_file}' não existe.") # retorna ao usuario informando que arquivo nao existe
        return

    venv_path = os.path.join(diretorio_projeto, "venv", "bin", "activate") # criando variavel com o caminho da ativacao do ambiente virtual
    subprocess.run(["source", venv_path], shell=True) # comando para ativar ambiente virtual

    try: # tentativa de instalacao das dependencias
        subprocess.run(["pip", "install", "-r", requirements_file], check=True)
        print("Dependencias instaladas com sucesso.")
    except subprocess.CalledProcessError as e: # exibir quais erros ocorreram para reselver
        print(f"Erro ao instalar as dependencias: {e}")

def main():
    diretorio_projeto = sys.argv[1] # usuario indica o arquivo que vai ser referente ao caminho do projeto criado no ambiente virtual
    requirements_file = os.path.join(diretorio_projeto, "requirements.txt") # armazenar arquivo requirements
    
    criar_ambiente_virtual(diretorio_projeto) # funcao para criar o ambiente virtual
    instalar_dependencias(diretorio_projeto, requirements_file) # funcao para fazer a instalacao das dependencias do ambiente

# condicional para execucao do script e chama a funcao principal main()
if __name__ == "__main__":
    main()

ao executar o comando python3 script_venv.sh /home/ernane/dash/, tenho o retorno que nao foi encontrado o caminho da ativacao do ambiente virtual /home/ernane/code/dash/venv/bin/activate: 1: source: not found.

ate recriei o ambiente virtual manualmente, mas tive o mesmo retorno, tambem revisei o script e nao consegui encontrar nenhum trecho que faca ele dar esse problema.

se puderem me ajudar com isso, agradeco.

2 respostas
solução!

Oi, Ernane!

Parece que você está enfrentando um problema comum ao tentar ativar o ambiente virtual usando o comando source dentro do Python. O erro que você está recebendo, source: not found, ocorre porque o source é um comando interno do shell e não pode ser executado diretamente pelo subprocess.run sem um shell interativo.

Uma maneira de contornar isso é usar um script shell para ativar o ambiente virtual antes de executar o seu script Python. Aqui está um exemplo de como você pode fazer isso:

  1. Crie um script shell, por exemplo run_script.sh, com o seguinte conteúdo:
#!/bin/bash

# Caminho do diretório do projeto
DIRETORIO_PROJETO=$1

# Ativa o ambiente virtual
source "$DIRETORIO_PROJETO/venv/bin/activate"

# Executa o script Python
python3 script_venv.py "$DIRETORIO_PROJETO"
  1. Torne o script executável:
chmod +x run_script.sh
  1. Execute o script shell em vez do script Python diretamente:
./run_script.sh /home/ernane/dash

Ao usar este método, o ambiente virtual será ativado no contexto do shell antes de executar o seu script Python. Isso deve resolver o problema de ativação do ambiente virtual.

Bons estudos!

Ola!

Segui suas orientacoes e consegui resolver o problema!

Muito obrigado!