Um erro muito comum ao executar automações pelo Runner é o Python Environment preparation failed.
. Como o próprio nome diz, o Runner falha ao tentar preparar o ambiente python para execução da robô. Este erro é lançado em situações diversas, e impede que o Runner execute o Robô. Abaixo algumas abordagens de como lidar com esse erro:
Em alguns casos de bloqueio de ambiente, ao rodar uma automação pelo Runner o erro abaixo pode ser lançado:
exec: C:\\Botcity\\.\\venvs\\SAP/Scripts/python -m pip install --upgrade pip
Requirement already satisfied: pip in c:\\botcity\\venvs\\sap\\lib\\site-packages (23.2.1)
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.org', port=443): Read timed out. (read timeout=15)")': /simple/pip/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.org', port=443): Read timed out. (read timeout=15)")': /simple/pip/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.org', port=443): Read timed out. (read timeout=15)")': /simple/pip/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.org', port=443): Read timed out. (read timeout=15)")': /simple/pip/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.org', port=443): Read timed out. (read timeout=15)")': /simple/pip/
.....
Python environment preparation failed.
Error executing task: Python environment preparation failed....
Resposta/solução padrão:
Pelo erro lançado, aparentemente o ambiente onde está utilizando o Runner não está conseguindo estabelecer conexão com PyPI (Python Package Index). Com isso, o Runner não vai conseguir executar o comando do "pip install"
para instalar os pacotes. isso é comum em ambientes corporativos que possuem bloqueio, provavelmente existe algum bloqueio na comunicação com o PyPi
.
Poderia verificar com o time de infra se há esse bloqueio? Aqui temos uma documentação com as liberações necessárias para esses casos: https://documentation.botcity.dev/getting-started/prerequisites/#problems-with-blocking-environments
Log Screen Process created
Log Application Process created
WAITING NEW TASKS...
Executing task: Bot_LoginSAP...
exec: python -m venv ./venvs/Bot_LoginSAP_I
execAndWait - Error: Cannot invoke "java.lang.Process.waitFor()" because "this.process" is null
Resposta/solução padrão:
Como o erro foi lançado após a tentativa de criar o ambiente virtual, provavelmente é algum problema relacionado ao Python, como:
virtualenv
não está instalado.Para verificar a instalação do Python, você pode rodar os comandos:
python --version
where python
Se obter o retorno do Python através dos comandos acima, é só garantir que os pacotes abaixo estejam instalados:
pip
virtualenv
A forma mais fácil de garantir isso é executando esse comando aqui:
Em alguns casos o Python não é encontrado ao rodar a automação pelo Runner.
Resposta/solução padrão:
Para confirmar se o Python esta instalado no ambiente, você pode usar os comandos:
python --version
where python
Em alguns casos, o ambiente possui duas versões de Python instaladas, e é muito comum que sejam chamadas por comandos diferentes, nestes caso você pode rodar para verificar qual comando esta chamando a versão de Python que deseja:
py
python
Caso a versão que deseja esteja sendo chamada através do comando py
, para que o Runner utilize esse comando para a preparação do ambiente, será necessário incluir a linha pythonBinary=py
no arquivo de configuração do Runner. Esse arquivo é o conf.bcf
e esta localizado dentro da pasta conf
do SDK da BotCity.
Outra opção é passar o caminho completo do Python que deseja utilizar para a flag pythonBinary
, assim: