Não é possível ativar o ambiente virtual com um script de shell [duplicado]

4

Eu li perguntas semelhantes e tentei sugestões, mas ainda não consigo ativar meu ambiente virtual. A hierarquia de diretórios é:

myproject
-- virtualenv
-- startvenv.sh

startvenv.sh é:

#!/bin/bash
source virtualenv/bin/activate

Estou executando o startvenv.sh por:

./startvenv.sh

Nenhum erro, mas nada acontece. Por quê? Idealmente, quero abrir um novo terminal e ativar meu ambiente virtual lá.

    
por Heuyie 16.10.2017 / 18:19

1 resposta

5

O virtualenv é ativado por sourcing (não executando normalmente) o script virtualenv/bin/activate . Se você quiser fazer isso em seu próprio script, você deve fornecer esse script também e não apenas executá-lo. Significado:

source startvenv.sh

A diferença entre execução e terceirização é que a execução executa o script em sua própria subpasta separada, que é isolada da shell pai (aquela da qual você a chamou), por exemplo, variáveis de ambiente e outras alterações dentro do script não são propagadas para o pai.

O fornecimento explicitamente faz exatamente isso, executando o script no seu shell atual , que deixa intactas todas as alterações nas variáveis de ambiente, etc.

Aqui está um extrato resumido de man bash (seção sobre o Shell Builtins):

    .  filename [arguments]
   source filename [arguments]
          Read and execute commands from filename  in  the  current  shell
          environment  and return the exit status of the last command exe‐
          cuted from filename.  [ ... ]
    
por Byte Commander 16.10.2017 / 19:43