Onde o Python está instalado
Muitas vezes precisamos saber em que diretório está nossa instalação do python. Representaremos por $
o prompt do terminal do sistema, e comentários por #
. O sinal [...]
indica linhas omitidas.
# Primeiro verificamos se o python está instalado $ python --version Python 3.9.13 # Essa versão pode ser inicializada $ python Python 3.9.13 (main, Aug 25 2022, 23:26:10) [GCC 11.2.0] :: Anaconda, Inc. on linux Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path ['', '/home/usuario/.anaconda3/lib/python39.zip', '/home/usuario/.anaconda3/lib/python3.9', '/home/usuario/.anaconda3/lib/python3.9/lib-dynload', '/home/usuario/.anaconda3/lib/python3.9/site-packages'] >>> exit()
O terminal interativo do python pode ser abandonado com exit()
, quit()
ou CTRL-D
.
venv
.Vemos que o Python 3.9.13, instalado com o Anaconda (usado para disparar o Jupyter Notebook) teve prioridade na chamada. Aproveitamos para importar o módulo sys
e verificar os caminhos válidos para essa instalação.
No entanto, tenho outra versão, mais recente, do Python instalada. Versões diferentes podem ser usadas para abrir um terminal de comando de linha, como acima, ou para carregar um ambiente virtual, por exemplo. Temos, portanto, que encontrar quais são as versões instaladas.
Existem algumas maneiras de descobrir onde o Python está instalado, tipicamente com os comandos which
, whereis
e find
.
which |
exibe o diretório de instalação do executável Python que está no PATH, |
whereis |
exibe o diretórios de instalação do código fonte, binários e páginas man, |
find |
procura no sistema onde estão os arquivos *.py. |
Por exemplo:
$ which python /home/guilherme/.anaconda3/bin/python $ whereis python python: /usr/bin/python /home/guilherme/.anaconda3/bin/python /usr/share/man/man1/python.1.gz $ find ~/Projetos -name *.py # uma lista de arquivos com extensão py é exibida.
No último comando usamos find ~/Projetos -name *.py
para encontrar arquivos com extensão .py partindo do diretório ~/Projetos, lembrando que ~ significa a pasta do usuário, /home/usuario. O comando find
é muito mais geral que o exemplo mostrado e pode ser usado de muitas formas diferentes. Nenhum desses comandos são específicos para o python.
O comando whereis python
mostra que tenho outra versão instalada, além do python da Anaconda, em /usr/bin/python
. Ela pode ser executada diretamente do terminal:
$ /usr/bin/python Python 3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path ['', '/usr/lib64/python311.zip', '/usr/lib64/python3.11', '/usr/lib64/python3.11/lib-dynload', '/usr/lib64/python3.11/site-packages', '/usr/lib/python3.11/site-packages']
Vimos assim que há uma versão mais recente do python instalada, o python3.11. Como uma ilustração do uso de versões diferentes do python vamos estender a discussão para a instalação e uso de módulos instalados.
Módulos em diferentes versões
Vimos acima que, no caso de meu computador o comando python
está associado ao python3.9.3 da anaconda (porque é o caminho que ele encontra primeiro no PATH (exibido abaixo). Essa instalação já contém o pip. No entanto não há pip instalado para a versão do python3.11.
# exeminando o PATH $ echo $PATH /home/usuario/.anaconda3/share/rubygems/bin:/home/usuario/.anaconda3/share/rubygems/bin: /home/usuario/.anaconda3/bin:/home/usuario/.anaconda3/condabin:/home/usuario/.local/bin: /home/usuario:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin # pip está instalado no python3.9 $ python -m pip --version pip 22.2.2 from /home/guilherme/.anaconda3/lib/python3.9/site-packages/pip (python 3.9) # pip não está instalado no python3.11 $ python3.11 -m pip --version /usr/bin/python3.11: No module named pip
O pip não está instalado para o python3.11. Para essa instalação vamos usar o ensurepip, descrito no artigo sobre ambientes virtuais.
$ python3.11 -m ensurepip [...] Successfully installed pip-22.2.2 # para verificar a instalação $ python3.11 -m pip --version pip 22.2.2 from /home/usuario/.local/lib/python3.11/site-packages/pip (python 3.11) # caso um upgrade do pip seja necessário $ python3.11 -m ensurepip --upgrade
Vemos assim que essa instalação do pip está em diretório diferente da instalação do anaconda. Para instalar módulos fazemos:
# para instalar módulos no ambiente do python3.9 $ python -m pip install <modulo> # ou $ pip install <modulo> # para instalar módulos no ambiente do python3.11 $ python3.11 -m pip install <modulo>
Observe que essa diferenciação entre os nomes python e python3.11 ocorre no meu computador e pode ser diferente dependendo da forma de instalação usada. Um computador pode ter várias outras versões do python instaladas, como o python2. Da mesma forma a criação de um ambiente virtual depende da versão do python que se quer usar.
Por default o Python é instalado no Linux no diretório /usr/local/bin/ e no Windows em C:\Python39 ou C:\Users\YourUser\AppData\Local\Programs\Python\PythonX onde X é o número de versão. O Anaconda é instalado em diretório definido pelo usuário.
Usando o pip
Para instalar um módulo no python3.11:
$ python3.11 -m pip install django
Para verificar quais os módulos instalados usamos:
$ python3.11 -m pip freeze [..] beautifulsoup4==4.11.0 Django==4.1.3 Markdown==3.4.1 Pillow==9.2.0 [..]
Os módulos instalados junto com o Anaconda são outros:
$ python -m pip freeze [..] anaconda-client==1.11.0 anaconda-navigator==2.3.2 [..]
Em ambos os casos várias linhas foram omitidas.
Também podemos ver os módulos instalados de dentro de uma sessão do python.
$ python3.11 Python 3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)] on linux >>> help("modules") Please wait a moment while I gather a list of all available modules... /usr/lib/python3.11/site-packages/_distutils_hack/__init__.py:33: UserWarning: Setuptools is replacing distutils. warnings.warn("Setuptools is replacing distutils.") PIL bisect glob re PyQt5 blivet gnome_abrt readline [..] # para obter ajuda específica sobre um módulo digitamos help("nome_modulo") >>> help("random")
Módulos em ambientes virtuais
Para criar um ambiente virtual em uma versão específica do python informamos qual versão deve ser usada. Por ex., para criar um ambiente virtual em ~/Projetos/.venv usamos:
$ python3.11 -m venv ~/Projetos/.venv # para ativar esse ambiente $ source ~/Projetos/.venv/bin/activate # o prompt muda para refletir esse estado (.venv) $ # para executar o python nesse ambiente $ cd ~/Projetos/.venv (.venv) (~/Projetos/.venv)$ python Python 3.11.0
Como visto, toda a operação feita dentro do ambiente se refere à versão do python que instalou o ambiente. Nesse ambiente a biblioteca pandas não está instalada. Para instalar essa biblioteca saimos do python e usamos pip:
>>> import pandas [..] ModuleNotFoundError: No module named 'pandas' # saimos do python >>> exit() # instalamos o módulo pandas (.venv) (~/Projetos/.venv)$ python -m pip install pandas Collecting pandas [..] Successfully installed numpy-1.23.5 pandas-1.5.2 python-dateutil-2.8.2 pytz-2022.6 six-1.16.0 # o comando acima sugere um upgrade do pip [notice] A new release of pip available: 22.2.2 -> 22.3.1 [notice] To update, run: pip install --upgrade pip (.venv) (~/Projetos/.venv)$ pip install --upgrade pip [..] Successfully installed pip-22.3.1
O uso do pip acima, após a instalação da biblioteca pandas, informa a existência de um upgrade e fornece o comando para fazer essa atualização.
Bibliografia
Sites
- Phylos.net: Ambientes Virtuais, PIP e Conda,
- Real Python: Why Can’t Python Find My Modules?,
- javaTpoint: Check Installed Modules in Python.
todos acessados em dezembro de 2022.