Criei um ambiente virtual usando
python -m venv venv
Agora estou abrindo um shell Python sem ativar o ambiente virtual executando
import sys
print(sys.path, sys.prefix)
Eu entendo
['', '/usr/lib/python312.zip', '/usr/lib/python3.12', '/usr/lib/python3.12/lib-dynload', '/usr/lib/python3.12/site-packages'] /usr
que é exatamente o que eu esperava.
Enquanto, se eu ativar o ambiente, a saída é
['', '/usr/lib/python312.zip', '/usr/lib/python3.12', '/usr/lib/python3.12/lib-dynload', '/home/myname/mypath/venv/lib/python3.12/site-packages'] /home/myname/Projects/pypath/venv
O que me incomodou muito é que, mesmo dentro do venv, parece que o interpretador está pesquisando pacotes primeiramente no local do sistema e só depois dentro do diretório venv.
Isso é verdade?
Não . Os pacotes do sistema estão em
/usr/lib/python3.12/site-packages
, que não está presente quando você está "dentro" do venv.Os caminhos antes do venv-site (que é
/home/myname/mypath/venv/lib/python3.12/site-packages
o seu caso) são para importações de biblioteca padrão .Por exemplo, se você
import csv
ou algum outro módulo stdlib, entãocsv.__file__
será encontrado em/usr/lib/python3.12/csv.py
.Se você estiver tentando exibir os pacotes de dentro do python, você pode usar o seguinte código. Tente este código com e sem o ambiente virtual ativado.