===================================== Gerenciadores de ambiente para python ===================================== Gerenciadores de ambiente permite que você possua em seu computador ou conta aplicações com multiplas versões de pacotes e até mesmo diferente versão do intrepetador *python*. .. contents:: :depth: 1 :local: Virtualenv ---------- Virtualenv é um utilitário para criar ambientes python isolado do sistema. Desde a versão ``3.3`` parte do virtualenv é nativo do python, pelo `módulo venv <https://docs.python.org/3/library/venv.html>`_. Instalação ^^^^^^^^^^ O pacote ``virtualenv`` está disponível tanto em módule, ``module load virtualenv`` quanto é possível instalar via ``pip``. Instalar localmente com ``pip``: """""""""""""""""""""""""""""""" Para instalar via pip no seu usuário execute o comando: ``pip --user install virtualenv``. Exemplo: .. code-block:: shell :caption: Exemplo de instalação do virtualenv :name: install-virtualenv-local [odair@c3hpc:doc/virtualenv ]$ module load python/3.9.7 [odair@c3hpc:doc/virtualenv ]$ pip install virtualenv Collecting virtualenv Downloading virtualenv-20.16.7-py3-none-any.whl (8.8 MB) |████████████████████████████████| 8.8 MB 7.2 MB/s Requirement already satisfied: distlib<1,>=0.3.6 in /home/odair/.local/lib/python3.9/site-packages (from virtualenv) (0.3.6) Requirement already satisfied: filelock<4,>=3.4.1 in /home/odair/.local/lib/python3.9/site-packages (from virtualenv) (3.8.0) Requirement already satisfied: platformdirs<3,>=2.4 in /home/odair/.local/lib/python3.9/site-packages (from virtualenv) (2.5.2) Installing collected packages: virtualenv Successfully installed virtualenv-20.16.7 [odair@c3hpc:doc/virtualenv ]$ É possível conferir se foi instalado e a versão com o comando ``virtualenv --version``, como no exemplo avaixo: .. code-block:: shell :name: check-virtualenv-version-local [odair@c3hpc:doc/virtualenv ]$ virtualenv --version virtualenv 20.16.7 from /home/odair/.local/lib/python3.9/site-packages/virtualenv/__init__.py [odair@c3hpc:doc/virtualenv ]$ .. note:: | Executar o comando ``pip install virtualenv`` vai instalar o ``virtualenv`` na home do seu usuário, dentro do diretório ``${HOME}/local``, então caso não funcione o virtualenv veja se a variável de ambiente ``PATH`` inclui o caminho ``${HOME}/.local/bin/`` caso contrário adicione o comando abaixo: | ``echo 'PATH=${PATH}:${HOME}/.local/bin' >> ${HOME}/.bashrc && source ${HOME}/.bashrc`` Criar ambiente: ^^^^^^^^^^^^^^^ Para criar um ambiente com ``virtualenv`` use o comando ``virtualenv venv``. Exemplo: .. code-block:: shell :caption: Exemplo de como cirar ambiente com virtualenv :name: create-env-virtualenv [odair@c3hpc:doc/virtualenv ]$ virtualenv venv created virtual environment CPython3.9.2.final.0-64 in 1767ms creator CPython3Posix(dest=/home/odair/doc/virtualenv/venv, clear=False, no_vcs_ignore=False, global=False) seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/odair/.local/share/virtualenv) added seed packages: pip==22.1.2, setuptools==62.3.2, wheel==0.37.1 activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator [odair@c3hpc:doc/virtualenv ]$ ls venv [odair@c3hpc:doc/virtualenv ]$ O virtualenv cria um diretório chamado ``venv`` no qual contêm os arquivos de ativação. Ativar ambiente: ^^^^^^^^^^^^^^^^ Para ativar o ambiente com virtualenv execute o comando: ``source <env>/bin/activate``, onde `<env>` é o diretório criado pelo virtualenv, normalmente ele se chama **venv**. Exemplo de ativação: .. code-block:: shell :caption: Exemplo de como ativar virtualenv :name: activate-virtualenv [odair@c3hpc:doc/virtualenv ]$ ls venv [odair@c3hpc:doc/virtualenv ]$ source venv/bin/activate (venv) [odair@c3hpc:doc/virtualenv ]$ Note que apareceu ``(venv)`` ao lado da linha de comando, isso indica que você está com o ambiente ativado. Desativar ambiente: ^^^^^^^^^^^^^^^^^^^ Para desativar o ambiente execute o comando ``deactivate``. Exemplo: .. code-block:: shell :caption: Exemplo de como desativar o virtualenv :name: deactivate-virtualenv (venv) [odair@c3hpc:doc/virtualenv ]$ deactivate [odair@c3hpc:doc/virtualenv ]$ Note que desapareceu ``(venv)`` ao lado da linha de comando, isso indica que o ambiente está desativado. Gerenciar pacotes no ambiente: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ O `virtualenv` utiliza o `pip` para gerencia os módulos e biblioteca, o único requisito é estar com o ambiente ativado. Instalação: """"""""""" Para instalar pacotes com ambiente `virtualenv` entre no ambiente e instale normalmente com `pip`. Por exemplo para instalar os pacotes pandas e numpy execute a segunte sequência de comandos: .. code-block:: shell :caption: Instalação dos módulos pandas e numpy dentro do ambiente do virtualenv :name: install-pandas-numpy-virtualenv [odair@c3hpc:doc/virtualenv ]$ source venv/bin/activate (venv) [odair@c3hpc:doc/virtualenv ]$ pip install pandas numpy Collecting pandas Downloading pandas-1.5.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.2/12.2 MB 44.6 MB/s eta 0:00:00 Collecting numpy Downloading numpy-1.23.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 17.1/17.1 MB 45.3 MB/s eta 0:00:00 Collecting python-dateutil>=2.8.1 Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB) Collecting pytz>=2020.1 Downloading pytz-2022.6-py2.py3-none-any.whl (498 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 498.1/498.1 kB 15.1 MB/s eta 0:00:00 Collecting six>=1.5 Using cached six-1.16.0-py2.py3-none-any.whl (11 kB) Installing collected packages: pytz, six, numpy, python-dateutil, pandas Successfully installed numpy-1.23.5 pandas-1.5.2 python-dateutil-2.8.2 pytz-2022.6 six-1.16.0 [notice] A new release of pip available: 22.1.2 -> 22.3.1 [notice] To update, run: pip install --upgrade pip (venv) [odair@c3hpc:doc/virtualenv ]$ Para verificar se realmente foi instalado os módulos você pode simplemente executar um arquivo que importe o módulo ou verificar a versão, como é feito abaixo: .. code-block:: python3 :caption: Verificando se os modulos foram instalados, :name: virtualenv-check-module-is-installed, (venv) [odair@c3hpc:doc/virtualenv ]$ python -c " import pandas as pd import numpy as np print('Versão pandas instalada: ',pd.__version__) print('Versão numpy instalada: ',np.__version__) " Versão pandas instalada: 1.5.2 Versão numpy instalada: 1.23.5 (venv) [odair@c3hpc:doc/virtualenv ]$ Remover pacotes: """""""""""""""" Para remover pacotes ative o `virtualenv` e execute o comando `pip uninstall <pacote>` onde `<pacote>` é o nome do módulo que deseja remover. Exemplo: .. code-block:: shell :caption: Remove biblioteca numpy do ambiente :name: uninstall-numpy-virtual-env (venv) [odair@c3hpc:doc/virtualenv ]$ pip uninstall numpy Found existing installation: numpy 1.23.5 Uninstalling numpy-1.23.5: Would remove: /home/odair/doc/virtualenv/venv/bin/f2py /home/odair/doc/virtualenv/venv/bin/f2py3 /home/odair/doc/virtualenv/venv/bin/f2py3.9 /home/odair/doc/virtualenv/venv/lib/python3.9/site-packages/numpy-1.23.5.dist-info/* /home/odair/doc/virtualenv/venv/lib/python3.9/site-packages/numpy.libs/libgfortran-040039e1.so.5.0.0 /home/odair/doc/virtualenv/venv/lib/python3.9/site-packages/numpy.libs/libopenblas64_p-r0-742d56dc.3.20.so /home/odair/doc/virtualenv/venv/lib/python3.9/site-packages/numpy.libs/libquadmath-96973f99.so.0.0.0 /home/odair/doc/virtualenv/venv/lib/python3.9/site-packages/numpy/* Proceed (Y/n)? y Successfully uninstalled numpy-1.23.5 Veja agora se executar o comando abaixo ele vai dizer que `numpy` não existe, portanto, foi removido. .. code-block:: shell :caption: Verificando se a biblioteca numpy foi removida. :name: check-numpy-is-uninstalled-virtualenv (venv) [odair@c3hpc:doc/virtualenv ]$ python -c " import numpy as np print('Versão numpy instalada: ',np.__version__) " Traceback (most recent call last): File "<string>", line 2, in <module> ModuleNotFoundError: No module named 'numpy' (venv) [odair@c3hpc:doc/virtualenv ]$ Gerar requeriments.txt """""""""""""""""""""" Para gerar o arquivo `requeriments.txt` entre no ambiente do virtualenv e execute o comando ``pip freeze > requirements.txt``. Exemplo: .. code-block:: shell :caption: Gerando o arquivo requirements.txt :name: vitualenv-generate.requirements.txt (venv) [odair@c3hpc:doc/virtualenv ]$ pip freeze > requeriments.txt (venv) [odair@c3hpc:doc/virtualenv ]$ cat requeriments.txt pandas==1.5.2 python-dateutil==2.8.2 pytz==2022.6 six==1.16.0 (venv) [odair@c3hpc:doc/virtualenv ]$ Execução de aplicações ^^^^^^^^^^^^^^^^^^^^^^ O *virtualenv* só permite executação de dentro do ambiente. Então, para rodar aplicações com o *slurm* e o virtualenv se sugere as seguintes opções: .. contents:: :local: :depth: 1 Ativar o ambiente e executar a aplicação """""""""""""""""""""""""""""""""""""""" Ativar o ambiente no script `sbatch` """""""""""""""""""""""""""""""""""" Dicas e recomendações: ^^^^^^^^^^^^^^^^^^^^^^ Pipenv ------ Criar ambiente: ^^^^^^^^^^^^^^^ Ativar ambiente: ^^^^^^^^^^^^^^^^ Desativar ambiente: ^^^^^^^^^^^^^^^^^^^ Executar aplicações dentro e fora do ambiente: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Gerenciar pacotes no ambiente: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Dicas e recomendações: ^^^^^^^^^^^^^^^^^^^^^^ Poetry ------ Criar ambiente: ^^^^^^^^^^^^^^^ Ativar ambiente: ^^^^^^^^^^^^^^^^ Desativar ambiente: ^^^^^^^^^^^^^^^^^^^ Executar aplicações dentro e fora do ambiente: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Gerenciar pacotes no ambiente: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Dicas e recomendações: ^^^^^^^^^^^^^^^^^^^^^^ Anaconda -------- Criar ambiente: ^^^^^^^^^^^^^^^ Ativar ambiente: ^^^^^^^^^^^^^^^^ Desativar ambiente: ^^^^^^^^^^^^^^^^^^^ Executar aplicações dentro e fora do ambiente: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Gerenciar pacotes no ambiente: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Dicas e recomendações: ^^^^^^^^^^^^^^^^^^^^^^