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 :
- Montar o /home com
wxallowed
; - Criar uma nova partição ~/bin com
wxallowed
; - 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 ;
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