Ir para o conteúdo

Python3 e virtualenv

1 - Python e Virtualenv

Durante a minha vida com o GNU/Linux eu descobri uma série de programas bem interessantes que facilitaram e muitoa minha vida. Grande parte deles escrito em Python ( tem bastante Perl também, mas eu nunca desenvolvi nada nele... ). Poder rodar esses programas no meu novo sistema operacional seria uma maravilha. Para a minha alegria o OpenBSD suporta bem o Python : 2.7 e 3.x ( atualmente 3.6 ).

1.2 - Virtualenv

Como o próprio nome sugere, o VirtualEnv é um ambiente virtual para python. Basicamente você tem um diretorio com algumas bibliotecas básicas, e um shell script que sobrescreve algumas variaveis de ambiente do Python. Isso é bem útil quando se deseja isolar o desenvolvimento ou uso de alguma aplicaçao python.

No OpenBSD ( current ) eu encontrei dois pacotes py-virtualenv e o py3-virtualenv. Como estou usando o python3, os pacotes que começam com py3- são os que interessam agora :

pkg_add py3-virtualenv

O uso dá-se da seguinte forma :

virtualenv-3 <environment>

Esse <environment> vai ser uma árvore de diretórios criada pelo virtualenv-3, com os scripts e bibliotecas necessários. Ele vai tentar baixar algumas coisas para o ambiente, mas é possível tornar a criaçao do virtualenv ainda mais enxuta : sem wheel, setuptools ou mesmo pip.

Eu particularmente prefiro que o virtualenv instale esses 3 componentes, para que o desenvolvimento e execução dos programas em python seja o mais agnóstico possível.

Daí eu ganho esse erro de brinde :

ERROR: The executable /home/wolf/test/bin/python3.6 could not be run: [Errno 13] Permission denied: '/home/wolf/test/bin/python3.6'

Isso ocorre por causa das regras de W^X, que deve ser configurada na montagem do volume ( /etc/fstab por exemplo). No meu cenário atual apenas o /usr/local/ tem o wxallowed, o que me leva a três escolhas :

  1. Montar o /home com wxallowed ;
  2. Criar uma nova partição ~/bin com wxallowed ;
  3. Criar um diretório em /usr/local ;

A opção 2 eu acho que seria a mais correta, mas não tenho outra partição sobrando. Por isso segui com a alternativa 3 :

1.2.1 - Criar um diretorio em /usr/local

Criar o diretorio pessoal /usr/local/home/wolf/. Teve ser como root, por se tratar de um diretório que não pertence a usuários comuns. Use o doas :

doas mkdir -p /usr/local/home/wolf ;

1.2.2 - Criar o virtualenv

Criar o virtualenv : py3-wolf-venv0. É só um nome para o diretório a ser criado, escolha o que quiser. Eu preferi esse padrão pq indica <python-ver>-<user>-<id> :

doas virtualenv-3 /usr/local/home/wolf/py3-wolf-venv1 ;

1.2.3 - Conserte as permissões

Agora vamos ajustar as permissões para o meu usuário e grupo :

chown -R wolf:wolf /usr/local/home/wolf/py3-wolf-venv1/ ;

1.2.4 - Recapitulando ...

Em resumo pode-se usar a função abaixo para criar seu virtualenv :

_wxvenv(){
    v="${1}" ;
    u=$(id -un) ;
    g=(id -gn) ;
    doas mkdir -p /usr/local/home/${u}/ ;
    doas virtualenv-3 /usr/local/home/${u}/${v} ;
    doas chown -R ${u}:${g} /usr/local/home/${u}/${v}/ ;
}

Podendo usar desta forma

_wxvenv venv2 ;

1.3 Ativando o virtualenv

Para carregar o virtualenv :

. <virtualvenv-dir>/bin/activate ;
ou
source <virtualvenv-dir>/bin/activate ;

Isso vai atualizar seu $PS1 ( acrescentando o nome do virtualenv ) e carregará algumas variáveis de ambiente.

Nota

O virtualenv ativado valerá apenas para o shell em que realizou a ativação. Abrir um novo terminal fora dele não herdará tudo o que foi carregado.

Para sair :

deactivate