Um guia de variáveis de ambiente para cientistas de dados
Como cientista de dados, você pode precisar configurar variáveis de ambiente para projetos localmente ou globalmente, em uma plataforma. Este guia mostra tudo o que você precisa saber!
Você talvez já tenha visto algum software pedindo permissão para modificar sua variável PATH, ou instruções de instalação dizendo, de forma enigmática, que você precisa "configurar corretamente sua variável LD_LIBRARY_PATH".
Como cientista de dados, você pode enfrentar outros perrengues com variáveis de ambiente ao interagir com sua stack de computação (principalmente se você não tem controle total sobre ela, como é o meu caso). Este post busca desmistificar o que é uma variável de ambiente e como ela é usada no contexto de ciência de dados.
O que é uma variável de ambiente?
Para começar, vou explicar o que é uma variável de ambiente, indo a fundo na variável PATH. Recomendo que você execute os comandos aqui no seu terminal bash (com as devidas adaptações — leia o texto para entender o que estou fazendo!).
Quando você acessa seu sistema, seja o terminal do seu computador local ou um servidor remoto via SSH, o interpretador bash precisa saber onde procurar por programas específicos, como o nano (editor de texto), o git (seu controle de versão) ou o executável do Python. Isso é controlado pela sua variável PATH. Ela especifica os caminhos para as pastas onde estão os programas executáveis.
Por convenção histórica, programas de linha de comando como nano, which e top ficam no diretório /usr/bin. (Por convenção, a pasta /bin é para binários, por isso o nome /bin.) Esses são os que vêm com o sistema operacional e, por isso, exigem permissões especiais para atualização.
Teste no seu terminal:
$ which which
/usr/bin/which
$ which top
/usr/bin/top
Tecnologia
Outros programas são instalados (por diversos motivos) em /bin. ls é um exemplo:
O mais importante sobre a variável PATH é que ela é "delimitada por dois-pontos". Ou seja, cada caminho de diretório é separado do próximo por um caractere de dois-pontos (:). A ordem em que o bash procura pelos programas vai da esquerda para a direita:
/usr/bin
/bin
/usr/local/bin
No meu computador, quando digito ls, o bash procura primeiro em /usr/bin. Não encontrando o ls em /usr/bin, ele passa para o próximo diretório, /bin. Como o meu ls está em /bin, ele executa o programa a partir dali.
Perceba como isso é, ao mesmo tempo, super flexível para personalizar seu ambiente e potencialmente bem frustrante se algum programa modificou sua variável PATH sem você saber.
Ué, dá mesmo para modificar a variável PATH? Dá sim — e existem algumas formas de fazer isso.
Como modificar a variável PATH
Usando uma sessão Bash
A primeira forma é transitória, ou temporária, e vale apenas para a sessão atual do bash. Você pode dar prioridade maior a uma pasta "pré-pendendo" ela na variável PATH:
Isso é temporário porque você só exporta durante a sessão atual do bash.
Arquivo bashrc ou .bash_profile
Se eu quiser tornar as mudanças mais permanentes, incluo os comandos no arquivo .bashrc ou .bash_profile. (Eu recomendo usar o .bashrc.) O arquivo .bashrc/.bash_profile fica no seu diretório pessoal (a variável de ambiente $HOME aponta para ele) e é executado quando o bash carrega. Ele roda todos os comandos dentro dele. Isso significa que você pode mudar sua variável PATH simplesmente colocando no .bashrc:
...outros comandos acima...
# Dar prioridade maior a /path/to/folder
exportPATH=/path/to/folder:$PATH
# Dar prioridade menor a /path/to/other/folder
exportPATH=$PATH:/path/to/folder
...outros comandos abaixo...Tecnologia
Ciência de dados e a variável de ambiente PATH
E por que isso é relevante para cientistas de dados? Bom, se você é da área, é bem provável que use Python, e que seu interpretador venha da distribuição Anaconda (altamente recomendada!). O instalador do Anaconda prioriza a pasta /path/to/anaconda/bin na variável PATH. Você pode ter outros interpretadores Python instalados no sistema (a Apple, por exemplo, envia um próprio). Porém, essa alteração no PATH garante que, sempre que você digitar python no terminal, vai executar o Python da distribuição Anaconda. No meu caso, após instalar o Anaconda, meu PATH fica assim:
Melhor ainda: quando você ativa um ambiente conda, ele coloca o caminho para a pasta de binários daquele ambiente no início do PATH. Por exemplo, para o meu blog, eu uso um ambiente chamado lektor. Assim...
$ echo $PATH/Users/ericmjl/anaconda/bin:/usr/bin:/bin:/usr/local/bin
$ which python
/Users/ericmjl/anaconda/bin/python
$ source activate lektor
$ echo $PATH/Users/ericmjl/anaconda/envs/lektor/bin:/Users/ericmjl/anaconda/bin:/usr/bin:/bin:/usr/local/bin
$ which python
/Users/ericmjl/anaconda/envs/lektor/bin/python
Tecnologia
Repare como o terminal agora prioriza o Python dentro do ambiente lektor, que ficou com prioridade maior.
Se você chegou até aqui, provavelmente já percebeu alguns conceitos importantes. Recapitulando:
PATH é uma variável de ambiente armazenada como texto simples que o bash usa para descobrir onde estão os programas executáveis.
PATH é delimitada por dois-pontos; diretórios com maior prioridade ficam à esquerda e os de menor prioridade à direita.
PATH pode ser modificada pré-pendendo ou anexando diretórios à variável. Dá para fazer isso temporariamente na sessão do bash usando o comando export, ou de forma persistente adicionando uma linha export no seu .bashrc ou .bash_profile.
Outras variáveis de ambiente importantes
Que outras variáveis de ambiente um cientista de dados pode encontrar? Aqui vai uma amostra das que você pode ver — e talvez precise ajustar — especialmente quando o time de TI está de férias (ou demorando a responder).
Para uso geral, você com certeza vai querer saber onde fica sua pasta HOME — em sistemas Linux, geralmente é /home/username; no macOS, costuma ser /Users/username. Para descobrir o valor de HOME:
Se você usa Python, a variável PYTHONPATH pode ser útil. Ela é usada pelo interpretador Python e especifica onde encontrar módulos/pacotes Python.
Se você lida com bibliotecas C++, conhecer a variável LD_LIBRARY_PATH é fundamental. Não tenho experiência suficiente para detalhar boas práticas aqui, então recomendo consultar este site para mais informações sobre o uso adequado do LD_LIBRARY_PATH.
Se você trabalha com Spark, a variável PYSPARK_PYTHON é de interesse. Ela indica ao Spark qual Python usar tanto no driver quanto nos workers; você também pode definir PYSPARK_DRIVER_PYTHON separadamente de PYSPARK_PYTHON, se necessário.
Hackeie suas variáveis de ambiente
É aqui que fica divertido! Veja algumas coisas que você pode fazer hackeando suas variáveis de ambiente.
Hack #1: Habilitar acesso ao PyPy. Eu acompanho ocasionalmente o desenvolvimento do PyPy, mas como ele ainda não é o interpretador padrão do Python e ainda não é conda install-able, eu o coloco em um diretório próprio $HOME/pypy/bin. Para habilitar o acesso ao PyPy, preciso garantir que o caminho para /path/to/pypy esteja presente na variável PATH, mas com prioridade menor que o meu interpretador CPython padrão.
Hack #2: Habilitar acesso a outros interpretadores/compiladores. É análogo ao caso do PyPy. Já testei o interpretador JIT do Lua para usar o Torch em deep learning e precisei adicionar o caminho correspondente no meu .bashrc.
Hack #3: Instalar pacotes Python no seu diretório pessoal. Em sistemas Linux compartilhados que usam o sistema de modules em vez de ambientes conda, um modulefile que você carrega pode vir configurado com um ambiente virtual que você não tem permissão para modificar. Se precisar instalar um pacote Python, use pip install --user my_pkg_name. Isso instala em $HOME/.local/lib/python-[version]/site-packages/. Nesse caso, garantir que seu PYTHONPATH inclua $HOME/.local/lib/python-[version]/site-packages com prioridade suficiente é essencial.
Hack #4: Depurar quando algo dá errado. Se surgir um erro ou comportamento inesperado — já aconteceu comigo do interpretador Python não ser encontrado corretamente após carregar meus módulos Linux — uma forma de depurar é definir temporariamente o PATH para um "padrão" sensato e fazer source disso, efetivamente "resetando" o PATH, para então ir pré-pendendo/anexando manualmente enquanto depura.
Para isso, coloque a linha abaixo em um arquivo chamado .path_default no seu diretório pessoal:
exportPATH="" # reseta o PATH para uma string vazia.exportPATH=/usr/bin:/bin:/usr/local/bin:$PATH # um padrão sensato; ajuste conforme necessário.Tecnologia
Quando algo der errado, você pode resetar seu PATH usando o comando "source":
Observação: você também pode executar exatamente os mesmos comandos direto na sessão do bash; a interatividade pode ajudar.
Conclusão
Espero que você tenha curtido este artigo e que ele ofereça, com o perdão do trocadilho, um bom caminho sempre que se deparar com variáveis de ambiente!
Aqui está nosso guia essencial sobre as características de um excelente portfólio de ciência de dados e por que criar um pode aumentar suas perspectivas de carreira.
As ferramentas essenciais de ciência de dados para iniciantes e profissionais da área para coletar, processar, analisar, visualizar e modelar os dados de forma eficiente.
Você talvez já tenha visto algum software pedindo permissão para modificar sua variável
PATH, ou instruções de instalação dizendo, de forma enigmática, que você precisa "configurar corretamente sua variávelLD_LIBRARY_PATH".Como cientista de dados, você pode enfrentar outros perrengues com variáveis de ambiente ao interagir com sua stack de computação (principalmente se você não tem controle total sobre ela, como é o meu caso). Este post busca desmistificar o que é uma variável de ambiente e como ela é usada no contexto de ciência de dados.
O que é uma variável de ambiente?
Para começar, vou explicar o que é uma variável de ambiente, indo a fundo na variável
PATH. Recomendo que você execute os comandos aqui no seu terminal bash (com as devidas adaptações — leia o texto para entender o que estou fazendo!).Quando você acessa seu sistema, seja o terminal do seu computador local ou um servidor remoto via SSH, o interpretador bash precisa saber onde procurar por programas específicos, como o
nano(editor de texto), ogit(seu controle de versão) ou o executável do Python. Isso é controlado pela sua variável PATH. Ela especifica os caminhos para as pastas onde estão os programas executáveis.Por convenção histórica, programas de linha de comando como
nano,whichetopficam no diretório/usr/bin. (Por convenção, a pasta/biné para binários, por isso o nome/bin.) Esses são os que vêm com o sistema operacional e, por isso, exigem permissões especiais para atualização.Teste no seu terminal:
Outros programas são instalados (por diversos motivos) em
/bin.lsé um exemplo:Há ainda programas instalados em outros diretórios especiais:
Como o seu terminal Bash descobre onde procurar cada coisa? Ele usa a variável de ambiente
PATH. Ela se parece com isto:O mais importante sobre a variável
PATHé que ela é "delimitada por dois-pontos". Ou seja, cada caminho de diretório é separado do próximo por um caractere de dois-pontos (:). A ordem em que o bash procura pelos programas vai da esquerda para a direita:/usr/bin/bin/usr/local/binNo meu computador, quando digito
ls, o bash procura primeiro em/usr/bin. Não encontrando olsem/usr/bin, ele passa para o próximo diretório,/bin. Como o meulsestá em/bin, ele executa o programa a partir dali.Perceba como isso é, ao mesmo tempo, super flexível para personalizar seu ambiente e potencialmente bem frustrante se algum programa modificou sua variável
PATHsem você saber.Ué, dá mesmo para modificar a variável
PATH? Dá sim — e existem algumas formas de fazer isso.Como modificar a variável
PATHUsando uma sessão Bash
A primeira forma é transitória, ou temporária, e vale apenas para a sessão atual do bash. Você pode dar prioridade maior a uma pasta "pré-pendendo" ela na variável
PATH:Ou pode dar prioridade menor "acrescentando" ao final da variável
PATH:Isso é temporário porque você só exporta durante a sessão atual do bash.
Arquivo
bashrcou.bash_profileSe eu quiser tornar as mudanças mais permanentes, incluo os comandos no arquivo
.bashrcou.bash_profile. (Eu recomendo usar o.bashrc.) O arquivo.bashrc/.bash_profilefica no seu diretório pessoal (a variável de ambiente$HOMEaponta para ele) e é executado quando o bash carrega. Ele roda todos os comandos dentro dele. Isso significa que você pode mudar sua variável PATH simplesmente colocando no.bashrc:Ciência de dados e a variável de ambiente
PATHE por que isso é relevante para cientistas de dados? Bom, se você é da área, é bem provável que use Python, e que seu interpretador venha da distribuição Anaconda (altamente recomendada!). O instalador do Anaconda prioriza a pasta
/path/to/anaconda/binna variávelPATH. Você pode ter outros interpretadores Python instalados no sistema (a Apple, por exemplo, envia um próprio). Porém, essa alteração noPATHgarante que, sempre que você digitarpythonno terminal, vai executar o Python da distribuição Anaconda. No meu caso, após instalar o Anaconda, meuPATHfica assim:Melhor ainda: quando você ativa um ambiente conda, ele coloca o caminho para a pasta de binários daquele ambiente no início do PATH. Por exemplo, para o meu blog, eu uso um ambiente chamado
lektor. Assim...Repare como o terminal agora prioriza o Python dentro do ambiente
lektor, que ficou com prioridade maior.Se você chegou até aqui, provavelmente já percebeu alguns conceitos importantes. Recapitulando:
PATHé uma variável de ambiente armazenada como texto simples que o bash usa para descobrir onde estão os programas executáveis.PATHé delimitada por dois-pontos; diretórios com maior prioridade ficam à esquerda e os de menor prioridade à direita.PATHpode ser modificada pré-pendendo ou anexando diretórios à variável. Dá para fazer isso temporariamente na sessão do bash usando o comandoexport, ou de forma persistente adicionando uma linhaexportno seu.bashrcou.bash_profile.Outras variáveis de ambiente importantes
Que outras variáveis de ambiente um cientista de dados pode encontrar? Aqui vai uma amostra das que você pode ver — e talvez precise ajustar — especialmente quando o time de TI está de férias (ou demorando a responder).
Para uso geral, você com certeza vai querer saber onde fica sua pasta
HOME— em sistemas Linux, geralmente é/home/username; no macOS, costuma ser/Users/username. Para descobrir o valor deHOME:Se você usa Python, a variável
PYTHONPATHpode ser útil. Ela é usada pelo interpretador Python e especifica onde encontrar módulos/pacotes Python.Se você lida com bibliotecas C++, conhecer a variável
LD_LIBRARY_PATHé fundamental. Não tenho experiência suficiente para detalhar boas práticas aqui, então recomendo consultar este site para mais informações sobre o uso adequado doLD_LIBRARY_PATH.Se você trabalha com Spark, a variável
PYSPARK_PYTHONé de interesse. Ela indica ao Spark qual Python usar tanto no driver quanto nos workers; você também pode definirPYSPARK_DRIVER_PYTHONseparadamente dePYSPARK_PYTHON, se necessário.Hackeie suas variáveis de ambiente
É aqui que fica divertido! Veja algumas coisas que você pode fazer hackeando suas variáveis de ambiente.
Hack #1: Habilitar acesso ao PyPy. Eu acompanho ocasionalmente o desenvolvimento do PyPy, mas como ele ainda não é o interpretador padrão do Python e ainda não é
conda install-able, eu o coloco em um diretório próprio$HOME/pypy/bin. Para habilitar o acesso ao PyPy, preciso garantir que o caminho para/path/to/pypyesteja presente na variávelPATH, mas com prioridade menor que o meu interpretador CPython padrão.Hack #2: Habilitar acesso a outros interpretadores/compiladores. É análogo ao caso do PyPy. Já testei o interpretador JIT do Lua para usar o Torch em deep learning e precisei adicionar o caminho correspondente no meu
.bashrc.Hack #3: Instalar pacotes Python no seu diretório pessoal. Em sistemas Linux compartilhados que usam o sistema de
modulesem vez de ambientesconda, ummodulefileque você carrega pode vir configurado com um ambiente virtual que você não tem permissão para modificar. Se precisar instalar um pacote Python, usepip install --user my_pkg_name. Isso instala em$HOME/.local/lib/python-[version]/site-packages/. Nesse caso, garantir que seuPYTHONPATHinclua$HOME/.local/lib/python-[version]/site-packagescom prioridade suficiente é essencial.Hack #4: Depurar quando algo dá errado. Se surgir um erro ou comportamento inesperado — já aconteceu comigo do interpretador Python não ser encontrado corretamente após carregar meus módulos Linux — uma forma de depurar é definir temporariamente o PATH para um "padrão" sensato e fazer source disso, efetivamente "resetando" o PATH, para então ir pré-pendendo/anexando manualmente enquanto depura.
Para isso, coloque a linha abaixo em um arquivo chamado
.path_defaultno seu diretório pessoal:Quando algo der errado, você pode resetar seu PATH usando o comando "source":
Observação: você também pode executar exatamente os mesmos comandos direto na sessão do bash; a interatividade pode ajudar.
Conclusão
Espero que você tenha curtido este artigo e que ele ofereça, com o perdão do trocadilho, um bom caminho sempre que se deparar com variáveis de ambiente!