- 1. Guia de Desenvolvimento em Python
- 2. Utilização do Jupyter na máquina Ilopolis
- 3. Utilização do Jupyter na máquina Egeon
1. Guia de Desenvolvimento em Python¶
Este pequeno guia mostra como instalar o software Anaconda e como criar e gerenciar ambientes de desenvolvimento da linguagem.
1.1 Instalação do Anaconda¶
O Python é um linguagem de programação e pode ser obtido de diversas formas. É possível instalá-lo em diferentes sistemas operacionais, através dos sistemas de gerenciamento de pacotes ou através de distribuições. Neste guia, será utilizando o pacote Anaconda, que é o pacote mais popular de distribuição da linguagem.
Para instalar o Anaconda, baixe o arquivo de instalação para a sua máquina local (não será necessário ter acesso root da máquina). Selecione o seu sistema operacional (Windows/Linux/Mac OS) e clique no botão Download. Para o sistema operacional Linux, não há instalador gráfico, portanto a instalação é feita através da linha de comando. Além disso, recomenda-se a instalação da versão 3.X da linguagem. Se você precisar da versão mais antiga (2.X), ainda sim será possível instalar a versão 3.X.
Figura 1 - Seleção e download do pacote Anaconda 3.7.
No seu computador, abra um terminal e navegue até o diretório em que o pacote foi baixado. Dê permissão de execução do arquivo:
$ chmod +x Anaconda3-2019.03-Linux-x86_64.sh
E a seguir, execute-o:
$ ./Anaconda3-2019.03-Linux-x86_64.sh
O instalador do pacote irá abrir uma página (no próprio terminal) com o arquivo de licença de uso, que deve ser aceito (digite "yes" ao final):
$ ./Anaconda3-2019.03-Linux-x86_64.sh Welcome to Anaconda3 2019.03 In order to continue the installation process, please review the license agreement. Please, press ENTER to continue >>>
Para instalar o pacote no local padrão (no seu HOME), verifique antes se você possui espaço suficiente (a instalação padrão e a configuração dos ambientes de desenvolvimento, podem ultrapassar facilmente 5GB!). O instalador irá sugerir o caminho "HOME/anaconda3". Se você quiser instalar em outro caminho, basta digitar no prompt de comando.
Ao final da instalação, será perguntado se o usuário deseja que o instalador inicialize o anaconda. Digite "yes". Dessa forma, não será necessário digitar "conda init" quando você quiser utilizar o Python da distribuição Anaconda.
Do you wish the installer to initialize Anaconda3 by running conda init? [yes|no] [no] >>>
Antes de prosseguir com a configuração dos ambientes de desenvolvimento, tenha em mente que o Python estará disponível na sua máquina a partir de duas formas diferentes: 1) a partir do pacote Anaconda que você acabou de instalar; 2) a partir da instalação local (este é o Python que vem junto com o seu Linux). A partir da instalação do Anaconda, e se você digitou "yes" para a última pergunta (ie., se você permitiu que o instalador inicializasse o Anaconda), logo o Python "padrão" é proveniente do Anaconda.
1.2 Comandos básicos do Conda¶
O conda é o programa básico do Anaconda. É a partir dele que são gerenciados os pacotes e é feita a configuração dos ambientes de desenvolvimento. Uma lista compreensível de comandos pode ser obtida em Getting started with conda
Verificação da versão do conda
$ conda --version
Atualização do conda (gerenciador de pacotes)
$ conda update conda
Listagem dos pacotes instalados
$ conda list
Listagem dos ambientes de desenvolvimento
$ conda info --envs
Criação de um ambiente de desenvolvimento
$ conda create --name NOME
Ativando um ambiente de desenvolvimento
$ conda activate NOME
Instalando um pacote
$ conda install PACOTE
1.3 Ambientes de Desenvolvimento¶
O Python é uma linguagem de programação que está se expandindo rapidamente e possui algumas versões disponíveis (2.X e 3.X). A diferença entre elas é substancial e a sua manutenção se deve ao fato de que muitos desenvolvedores precisam adaptar seus programas para as novas características da linguagem. Além disso, diversos pacotes são adicionados à linguagem o que pode fazer com que as versões destes pacotes não conversem muito bem entre si. Para ajudar a resolver esse problema, é recomendável que o usuário crie ambientes de desenvolvimento separados para tarefas específicas que deseja realizar.
No exemplo a seguir, será criado um ambiente de desenvolvimento com o nome "PyDev" (você pode escolher o nome que quiser, mas escolha um nome que reflita o desenvolvimento que você deseja fazer). Dentro deste ambiente, serão instalados os seguintes pacotes:
- xarray
- esmpy
- cartopy
- jupyterlab
- dask
- netCDF4
- joblib
- six
- rasterio
- geopandas
- pillow
- scikit-image
- sympy
Para instalar estes pacotes, crie primeiro o ambiente de desenvolvimento "PyDev":
$ conda create --name PyDev
Ative o ambiente criado "PyDev" criado:
$ conda activate PyDev
1.4 Instalação de Pacotes¶
Instale os pacotes da Seção 3 utilizando os comando abaixo:
$ conda install -c anaconda xarray $ conda install -c conda-forge esmpy $ conda install -c conda-forge cartopy $ conda install -c conda-forge jupyterlab $ conda install -c conda-forge dask $ conda install -c conda-forge netCDF4 $ conda install -c conda-forge joblib $ conda install -c conda-forge six $ conda install -c conda-forge rasterio $ conda install -c conda-forge geopandas $ conda install -c conda-forge pillow $ conda install -c conda-forge scikit-image $ conda install -c anaconda sympy
Observação: As instruções "-c anaconda" e "-c conda-forge" representam os canais (repositórios) de onde os pacotes serão obtidos.
Com a instalação de cada pacote, você irá notar que outros pacotes também serão instalados:
Pacote | Versão |
---|---|
affine | 2.2.2 |
asn1crypto | 0.24.0 |
attrs | 19.1.0 |
backcall | 0.1.0 |
bleach | 3.1.0 |
bokeh | 1.2.0 |
boost-cpp | 1.68.0 |
bzip2 | 1.0.6 |
cairo | 1.16.0 |
cartopy | 0.17.0 |
cffi | 1.12.3 |
cftime | 1.0.3.4 |
chardet | 3.0.4 |
click | 7.0 |
click-plugins | 1.1.1 |
cligj | 0.5.0 |
cloudpickle | 1.1.1 |
cryptography | 2.7 |
cycler | 0.10.0 |
cytoolz | 0.9.0.1 |
dask | 1.2.2 |
dask-core | 1.2.2 |
dbus | 1.13.6 |
decorator | 4.4.0 |
defusedxml | 0.5.0 |
descartes | 1.1.0 |
distributed | 1.28.1 |
entrypoints | 0.3 |
esmf | 7.1.0 |
esmpy | 7.1.0 |
expat | 2.2.5 |
fiona | 1.8.6 |
fontconfig | 2.13.1 |
freetype | 2.10.0 |
freexl | 1.0.5 |
gdal | 2.4.1 |
geopandas | 0.5.0 |
geos | 3.7.1 |
geotiff | 1.4.3 |
gettext | 0.19.8.1 |
giflib | 5.1.7 |
glib | 2.58.3 |
gst-plugins-base | 1.14.4 |
gstreamer | 1.14.4 |
hdf4 | 4.2.13 |
hdf5 | 1.10.4 |
heapdict | 1.0.0 |
icu | 58.2 |
idna | 2.8 |
imageio | 2.5.0 |
ipykernel | 5.1.1 |
ipython | 7.5.0 |
ipython_genutils | 0.2.0 |
jedi | 0.13.3 |
jinja2 | 2.10.1 |
joblib | 0.13.2 |
jpeg | 9c |
json-c | 0.13.1 |
jsonschema | 3.0.1 |
jupyter_client | 5.2.4 |
jupyter_core | 4.4.0 |
jupyterlab | 0.35.6 |
jupyterlab_server | 0.2.0 |
kealib | 1.4.10 |
kiwisolver | 1.1.0 |
libdap4 | 3.19.1 |
libgdal | 2.4.1 |
libiconv | 1.15 |
libkml | 1.3.0 |
libnetcdf | 4.6.2 |
libpng | 1.6.37 |
libsodium | 1.0.16 |
libspatialindex | 1.9.0 |
libspatialite | 4.3.0a |
libssh2 | 1.8.2 |
libtiff | 4.0.10 |
libuuid | 2.32.1 |
libxcb | 1.13 |
libxml2 | 2.9.9 |
libxslt | 1.1.32 |
locket | 0.2.0 |
lxml | 4.3.3 |
lz4-c | 1.8.3 |
mapclassify | 2.0.1 |
markupsafe | 1.1.1 |
matplotlib-base | 3.1.0 |
mistune | 0.8.4 |
mpi | 1.0 |
mpich | 3.2.1 |
msgpack-python | 0.6.1 |
munch | 2.3.2 |
nbconvert | 5.5.0 |
nbformat | 4.4.0 |
netcdf-fortran | 4.4.5 |
netcdf4 | 1.5.1.2 |
networkx | 2.3 |
notebook | 5.7.8 |
olefile | 0.46 |
openjpeg | 2.3.1 |
owslib | 0.17.1 |
packaging | 19.0 |
pandoc | 2.7.2 |
pandocfilters | 1.4.2 |
parso | 0.4.0 |
partd | 0.3.10 |
pcre | 8.41 |
pexpect | 4.7.0 |
pickleshare | 0.7.5 |
pillow | 6.0.0 |
pixman | 0.34.0 |
poppler | 0.67.0 |
poppler-data | 0.4.9 |
proj4 | 5.2.0 |
prometheus_client | 0.6.0 |
prompt_toolkit | 2.0.9 |
psutil | 5.6.2 |
pthread-stubs | 0.4 |
ptyprocess | 0.6.0 |
pycparser | 2.19 |
pyepsg | 0.4.0 |
pygments | 2.4.2 |
pykdtree | 1.3.1 |
pyopenssl | 19.0.0 |
pyparsing | 2.4.0 |
pyproj | 1.9.6 |
pyqt | 5.9.2 |
pyrsistent | 0.15.2 |
pyshp | 2.1.0 |
pysocks | 1.7.0 |
pywavelets | 1.0.3 |
pyyaml | 5.1 |
pyzmq | 18.0.1 |
qt | 5.9.7 |
rasterio | 1.0.24 |
requests | 2.22.0 |
rtree | 0.8.3 |
scikit-image | 0.15.0 |
send2trash | 1.5.0 |
shapely | 1.6.4 |
sip | 4.19.8 |
six | 1.12.0 |
snuggs | 1.4.6 |
sortedcontainers | 2.1.0 |
tblib | 1.4.0 |
terminado | 0.8.2 |
testpath | 0.4.2 |
tk | 8.6.9 |
toolz | 0.9.0 |
tornado | 6.0.2 |
traitlets | 4.3.2 |
urllib3 | 1.24.3 |
wcwidth | 0.1.7 |
webencodings | 0.5.1 |
xerces-c | 3.2.2 |
xorg-kbproto | 1.0.7 |
xorg-libice | 1.0.9 |
xorg-libsm | 1.2.3 |
xorg-libx11 | 1.6.7 |
xorg-libxau | 1.0.9 |
xorg-libxdmcp | 1.1.3 |
xorg-libxext | 1.3.4 |
xorg-libxrender | 0.9.10 |
xorg-renderproto | 0.11.1 |
xorg-xextproto | 7.3.0 |
xorg-xproto | 7.0.31 |
yaml | 0.1.7 |
zeromq | 4.3.1 |
zict | 0.1.4 |
zstd | 1.4.0 |
A maioria destes pacotes será instalada automaticamente, pois eles são dependências dos pacotes escolhidos para serem instalados.
1.5 Utilização dos pacotes¶
Veja na lista abaixo alguns Jupyter notebooks mostrando como utilizar alguns dos pacotes do Python.
2. Utilização do Jupyter na máquina Ilopolis¶
O Jupyter notebook é uma aplicação web que permite aos usuários acessar prompts iterativos do Python, terminais remotos dentre outras funcionalidades. Nesta seção é mostrado como acessar o Jupyter a partir da máquina Ilopolis do CPTEC.
Observação: Para ter acesso à máquina Ilopolis, será necessário ter acesso VPN para as máquinas virtuais do centro (máquinas de pesquisa). A VPN para acesso às máquinas virtuais é diferente da VPN para acesso aos supercomputadores. Se o usuário não possui a VPN às máquinas virtuais, será necessário solicitar o acesso por meio do Helpdesk do centro (helpdesk.cptec@inpe.br).
2.1 Conexão VPN¶
O Jupyter instalado na máquina Ilopolis está disponível para uso a partir do endereço http://ilopolis.cptec.inpe.br. Se o usuário não estiver com uma conexão VPN ativa para as máquinas virtuais do CPTEC (máquinas de pesquisa), não será possível acessar esse endereço. Para poder acessar o host da máquina Ilopolis pelo seu navegador de internet, o usuário deverá primeiro ativar a sua conexão VPN.
Figura 1 - Iniciando a conexão VPN para as máquinas virtuais do CPTEC.
2.2 Acessando o Jupyter pela máquina Ilopolis¶
Com uma conexão VPN ativa para as máquinas virtuais do CPTEC, para acessar o Jupyter da máquina Ilopolis, basta abrir o navegador de sua preferência (recomenda-se o Google Chrome ou o Mozilla Firefox) e digitar o seguinte endereço: http://ilopolis.cptec.inpe.br.
Observação: O navegador que o usuário deverá utilizar para acessar o Jupyter, é o navegador que está instalado na máquina local (ie., o computador do usuário).
Figura 2 - Acessando o Jupyter a partir da máquina Ilopolis.
2.3 Elementos básicos da interface do Jupyter¶
Uma das grandes vantagens de poder acessar o Jupyter a partir da máquina Ilopolis do CPTEC, é poder acessar os dados que estão armazenados no NetAPP. O NetApp está acessível a partir da Tupã ou a partir das máquinas virtuais (máquinas de pesquisa) pelo caminho '/dados/<grupo>', onde '<grupo>' é o grupo de trabalho do usuário (eg., das, ensemble etc). Além disso, o Jupyter fornece também um terminal para acessar os arquivos e diretório que estão em outras partes e/ou acessível a partir da máquina Ilopolis.
Ao acessar o endereço http://ilopolis.cptec.inpe.br, o usuário será direcionado para a tela de login do sistema. Para logar, basta usar o mesmo login e senha de acesso às máquinas virtuais (em geral, o mesmo login e senha da Tupã).
Figura 3 - Tela de login do Jupyter instalado na máquina Ilopolis.
Após logar no Jupyter, o usuário encontrará o navegador de arquivos do Jupyter a partir do qual poderá manipular seus arquivos e diretórios, além de abrir prompts iterativos do Python (e outras linguagem de programação), além de acessar o terminal da máquina Ilopolis.
Figura 4 - Navegador de arquivos do Jupyter.
Por padrão, o Jupyter irá apenas ler o seu diretório $HOME. Isto significa que, a princípio, os arquivos que estiverem no /dados não poderão ser diretamente acessados pela interface do Jupyter. Na interface principal do Juyter, observe as abas 'Files', 'Running', 'Clusters', 'Conda'. Na aba 'Files', que é a aba corrente, são mostrados os arquivos e diretórios do $HOME do usuário. Na aba 'Running' são mostrados os terminais e seções iterativas em execução. Nesta aba, o usuário deverá encerrar as seções que não estiver mais utilizando. Para isso, bastará clicar no botão 'Shutdown' ao lado de cada seção listada e que esteja em execução.
Para abrir uma seção iterativa do Python, na aba 'Files', o usuário deverá apontar o mouse para o botão 'New' e em seguida escolher o kernel que deseja executar. No Jupyter, o kernel representa uma seção de uma determinada linguagem (eg. Python e R) com um conjunto de pacotes pré configurados. Por exemplo, o kernel 'DASSCANPLOT' representa uma seção do Python com uma versão específica e um conjunto de pacotes específicos para a utilização do software SCANPLOT. Ao clicar no kernel 'DASSCANPLOT', uma nova aba no navegador do usuário será aberta com uma seção iterativa do Python pronta para uso.
Figura 5 - Abrindo o kernel DASSCANPLOT para uso no Jupyter.
Dentro de um notebook do Jupyter, independentemente da linguagem e do kernel utilizado, os comandos são inseridos e executados quando o usuário digitar a combinação de teclas <SHIFT>+<ENTER> ou por meio do botão 'Run' na barra de ferramentas.
Figura 6 - Seção iterativa do Python com o kernel DASSCANPLOT no Jupyter.
Para a utilização do Python, embora o kernel DASSCANPLOT contenha um ambiente pré configurado, é necsssário que o usuário carregue os pacotes que deseja utilizar. Veja no exemplo a seguir a utilização do kernel 'DASSCANPLOT' com o carregamento do pacote 'numpy'.
Figura 7 - Utilização do kernel 'DASSCANPLOT' no ambiente Jupyter e a utilização dos pacotes do kernel.
No Jupyter, as seções com os notebooks criados podem ser salvos em disco e reutilizados depois. Para isso, basta clicar no botão 'File' e depois em 'Save as...'. Digite um nome (eg., 'meu_primeiro_notebook') e em seguida, clique no botão 'Save'. Independente da linguagem e do kernel, os notebooks do Jupyter são salvos em disco com a extensão '*.ipynb'. Diferentemente de arquivos fonte com a extensão '*.py', os arquivos '*.ipynb' não podem ser diretamente executados fora do Jupyter (é possível converter arquivos '*.ipynb' em arquivos fonte '*.py').
Figura 8 - Salvando um notebook do Jupyter em disco.
Com o notebook salvo em disco, volte para a aba 'Files' (lembre-se que esta aba estará aberta em uma outra aba no seu navegador). Localize o arquivo 'meu_primero_notebook.ipynb' e verifique o seu status como 'running'.
Figura 9 - Localizando o notebook salvo na interface do Jupyter.
Para abrir e trabalhar em um terminal a partir do Jupyter, o usuário poderá realizar os mesmos procedimentos para abrir uma seção de notebook do Jupyter, mas selecionando a opção 'Terminal'.
Figura 10 - Abrindo uma seção de terminal a partir do Jupyter.
Dentro do Jupyter, e de forma semelhante ao notebook, o terminal também será aberto em uma nova aba do navegador do usuário. Ressalta-se que o terminal possuirá uma seção ativa da máquina Ilopolis e não da máquina local do usuário.
Figura 11 - Seção do terminal aberta a partir da interface do Jupyter.
Se o usuário já tiver encerrado suas atividades e já tiver salvo as suas últimas modificações (para isso, basta voltar para o notebook aberto e clicar em 'File' e depois em 'Save and Checkpoint'), basta fechar a aba do seu navegador que contém o notebook e em seguida, voltar para a aba 'Running' da interface de Jupyter. Observe que nesta aba estarão listados as seções de terminais e notebooks em execução, os quais o usuário poderá encerrar clicando no botão 'Shutdown'.
Figura 12 - Encerrando as seções de notebooks e terminais aberta a partir do Jupyter.
3. Utilização do Jupyter na máquina Egeon¶
Na máquina Egeon, também é possível utilizar o Jupyter notebook. Os procedimentos documentados a seguir, podem ser utilizados também em outras máquinas, desde que possuam o Jupyter instalado. Para o uso proposto, são necessárias duas etapas, sendo a primeira envolvendo a criação de uma instância do Jupyter na máquina Egeon e, a segunda, o carregamento dessa instância a partir da máquina local (localhost).
3.1 Criando uma instância do Jupyter na máquina Egeon¶
Para criar uma instância do Jupyter na Egeon, realize as etapas a seguir:
- Login ssh na Egeon;
- Carregar o ambiente Python onde o Jupyer está instalado, por exemplo:
$ source /home/carlos.bastarz/miniconda3/envs/readDiag/bin/activate
- Executar o Jupyter notebook:
$ jupyter-notebook --no-browser
Nota: a partir do comando anterior, no terminal será informado o endereço `http://localhost:YYYY/`, onde `YYYY` representa a porta onde o Jupyter está sendo executado e ela pode variar, eg., `8888`. Anote o valor indicado, pois ele será utiizado na próxima etapa. Com isso, será criada uma instância do Jupyter notebook que deverá ser acessada a partir da sua máquina local (localhost). Veja na próxima seção, como carregar a interface do Jupyter.
3.1 Para usar o ambiente pela interface do Jupyter da máquina Egeon através do localhost¶
- Abra uma nova seção do terminal na sua máquina local (certifique-se de estar conectado à VPN caso esteja fisicamente fora da rede interna do INPE);
- Execute o comando:
$ ssh -N -f -L localhost:XXXX:localhost:YYYY usuario@egeon
Nota: No comando, deverá ser indicada uma porta `XXXX` (eg., `8890`) para a qual será redirecionada a porta `YYYY` da Egeon; - Acesso o endereço pelo seu navegador local: `localhost:XXXX`
Figura 13 - Exemplos dos procedimentos documentados para acessar o Jupyter na máquina Egeon.