Como encontro a localização do meu diretório de pacotes de sites?
python
installation
Daryl Spitzer
fonte
fonte
pip show <package name>
Respostas:
Existem dois tipos de diretórios de pacotes de sites, global e por usuário .
Os diretórios globais site-packages (" dist-packages ") são listados
sys.path
quando você executa:Para uma lista mais concisa, execute
getsitepackages
o módulo do site no código Python:Nota: Com o virtualenvs, o getsitepackages não está disponível , mas a
sys.path
partir de cima listará o diretório de pacotes de sites do virtualenv corretamente. No Python 3, você pode usar o módulo sysconfig :O diretório de pacotes de sites por usuário ( PEP 370 ) é onde o Python instala seus pacotes locais:
Se isso apontar para um diretório inexistente, verifique o status de saída do Python e veja
python -m site --help
explicações.Dica: executando
pip list --user
oupip freeze --user
fornece uma lista de todos os pacotes de sites instalados por usuário .Dicas Práticas
<package>.__path__
permite identificar os locais de um pacote específico: ( detalhes )<module>.__file__
permite identificar a localização de um módulo específico: ( diferença )Execute
pip show <package>
para mostrar as informações do pacote no estilo Debian:fonte
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
(funciona também no Python 2 e 3).python -c "import site; print(site.getsitepackages()[0])"
(ou apenas o primeiro item com
site.getsitepackages()[0]
)fonte
hasattr(sys,'real_prefix')
e então determinar os pacotes do site heuristically de[p for p in sys.path if p.endswith('site-packages')][-1]
(mais verificar se há encontrado antes de fazer os[-1]
.Uma solução que:
... é esta linha:
Formatado para facilitar a leitura (em vez de usar como uma linha), que se parece com o seguinte:
Fonte: uma versão muito antiga da documentação "Como instalar o Django" (embora isso seja útil para mais do que apenas a instalação do Django)
fonte
cdsitepackages
, para mudar diretamente para o diretório de pacotes de sites do ambiente./usr/lib/python3/dist-packages
vez de/usr/lib/python3.5/dist-packages
.Para o Ubuntu ,
... não está correto.
Isso apontará para você
/usr/lib/pythonX.X/dist-packages
Esta pasta contém apenas pacotes que seu sistema operacional instalou automaticamente para a execução de programas.
No ubuntu , a pasta site-packages que contém os pacotes instalados via setup_tools \ easy_install \ pip estará em
/usr/local/lib/pythonX.X/dist-packages
A segunda pasta é provavelmente a mais útil se o caso de uso estiver relacionado à instalação ou leitura do código-fonte.
Se você não usa o Ubuntu, provavelmente está colando com segurança a primeira caixa de código no terminal.
fonte
module.__file__
é o melhor caminho. Se eles estão tentando instalar coisas ... basta usar as ferramentas.'/usr/lib/pythonX.X/dist-packages' in site.getsitepackages()
no Ubuntu (apesar de ser posterior/usr/local/...
na lista). Você só entra na/usr/local
viasudo pip
e não deve usarsudo pip
no Ubuntu, a menos que tenha decidido fazer sua própria distribuição: se você usarsudo pip
, é sua responsabilidade garantir que todas as dependências dos módulos python atuais e futuros instalados viasudo apt
ousudo pip
sejam compatíveis. Considere o problema quevirtualenv
foi criado para resolverdist-packages
no (L) Ubuntu.Isto é o que funcionou para mim:
fonte
~/.local/lib/python2.7/site-packages
).virtualenv
, reclama que o pacote não existe. como invoco os pacotes instalados em um local personalizado?Digamos que você instalou o pacote 'django'. importe-o e digite dir (django). Ele mostrará todas as funções e atributos desse módulo. Digite o interpretador python -
Você pode fazer o mesmo se tiver instalado o mercurial.
Isto é para o Snow Leopard. Mas acho que também deve funcionar em geral.
fonte
django.__file__
para isso ao invés de__path__
. e, não, não é uma garantia de que isso tenha algo a ver com pacotes do site, mas com coisas como django, que você provavelmente instalou com o pip , isso acontecerá quando você estiver com pressa e puder ser usado para outros propósitos também (lendo um arquivo de configuração padrão do sistema de arquivos, por exemplo).foo.bar
pacote:python -c "import foo.bar as _; print(_.__path__[0])"
Como outros observaram,
distutils.sysconfig
possui as configurações relevantes:... embora o padrão
site.py
faça algo um pouco mais bruto, parafraseado abaixo:(ele também adiciona
${sys.prefix}/lib/site-python
e adiciona os dois caminhossys.exec_prefix
também, caso essa constante seja diferente).Dito isto, qual é o contexto? Você não deveria estar mexendo com o seu
site-packages
diretamente; O setuptools / distutils funcionará para a instalação, e seu programa pode estar sendo executado em um ambiente virtual em que o pythonpath é completamente local do usuário, portanto, não deve assumir o uso dos pacotes de sites do sistema diretamente.fonte
python2
osx e ubuntu com e sem virtualenv, mas não compython3
nada.python3
.Uma maneira moderna de stdlib está usando o
sysconfig
módulo, disponível nas versões 2.7 e 3.2+.Nota :
sysconfig
( fonte ) não deve ser confundida com odistutils.sysconfig
submódulo ( fonte ) mencionado em várias outras respostas aqui. O último é um módulo totalmente diferente e não possui aget_paths
função discutida abaixo.Atualmente, o Python usa oito caminhos ( docs ):
Na maioria dos casos, os usuários que encontrarem essa pergunta estariam interessados no caminho 'purelib' (em alguns casos , você também pode estar interessado em 'platlib'). Diferentemente da resposta atual aceita, esse método ainda funciona independentemente de você ter ou não um virtualenv ativado.
No nível do sistema (este é Python 3.7.0 no mac OS):
Com um venv, você terá algo parecido com isto
Um script de shell também está disponível para exibir esses detalhes, que você pode chamar executando
sysconfig
como um módulo:fonte
platlib
, como por exemplo/usr/local/lib/python3.6/site-packages
? Tradicionalmente, as coisas instaladas localmente devem entrar/usr/local
.Os pacotes do sistema nativo instalados com a instalação python em sistemas baseados no Debian podem ser encontrados em:
No OSX -
/Library/Python/2.7/site-packages
usando este pequeno código:
No entanto, a lista de pacotes instalados via
pip
pode ser encontrada em:Ou pode-se simplesmente escrever o seguinte comando para listar todos os caminhos onde estão os pacotes python.
Nota: a localização pode variar com base no seu sistema operacional, como no OSX
fonte
site.getsitepackages()
partir da instalação do sistema, portanto, os pacotes dist, outras instalações mostrarão pacotes do site.Todas as respostas (ou: a mesma resposta repetida várias vezes) são inadequadas. O que você quer fazer é o seguinte:
A linha final mostra o diretório de instalação. Funciona no Ubuntu, enquanto os anteriores não. Não me pergunte sobre janelas ou outros discos, mas como é o mesmo diretório que o easy_install usa por padrão, provavelmente está correto em qualquer lugar em que o easy_install funcione (por isso, em todos os lugares, até nos macs). Diverta-se. Nota: o código original possui muitos palavrões.
fonte
easy_install
e não falhar normalmente se não estiver disponível que é inadequado :)Uma observação: A solução proposta (
distutils.sysconfig.get_python_lib()
) não funciona quando há mais de um diretório de pacotes de sites (conforme recomendado neste artigo ). Ele retornará apenas o diretório principal de pacotes do site.Infelizmente, também não tenho solução melhor. O Python não parece acompanhar os diretórios de pacotes de sites, apenas os pacotes dentro deles.
fonte
get_python_lib()
ao ser executado no virtualenv, mostra pacotes de sites do Python usados para criar virtualenv e não os pacotes de sites do virtualenv .Isso funciona para mim. Você receberá as pastas dist-packages e site-packages. Se a pasta não estiver no caminho do Python, não fará muito bem de qualquer maneira.
Saída (instalação do Ubuntu):
fonte
Isso deve funcionar em todas as distribuições dentro e fora do ambiente virtual devido à sua natureza "de baixa tecnologia". O módulo os sempre reside no diretório pai de 'site-packages'
Para alterar o diretório para o diretório de pacotes do site, eu uso o seguinte alias (nos sistemas * nix):
fonte
Uma observação adicional para a
get_python_lib
função já mencionada: em algumas plataformas, diretórios diferentes são usados para módulos específicos da plataforma (por exemplo: módulos que requerem compilação). Se você passarplat_specific=True
para a função, obtém os pacotes do site para pacotes específicos da plataforma.fonte
fonte
O pip show fornecerá todos os detalhes sobre um pacote: https://pip.pypa.io/en/stable/reference/pip_show/ [pip show] [1]
Para obter a localização:
fonte
Resposta à pergunta antiga. Mas use o ipython para isso.
Isso fornecerá a seguinte saída sobre o pacote imaplib -
fonte
Você deve tentar este comando para determinar o local de instalação do pip
Python 2
Python 3
fonte
Eu tinha que fazer algo um pouco diferente para um projeto que eu estava trabalhando em: encontrar o parente site-packages diretório em relação à base instalar prefixo. Se a pasta de pacotes de sites estivesse
/usr/lib/python2.7/site-packages
, eu queria a/lib/python2.7/site-packages
parte. De fato, encontrei sistemas ondesite-packages
estava/usr/lib64
, e a resposta aceita NÃO funcionou nesses sistemas.Semelhante à resposta do trapaceiro, minha solução espreita profundamente as entranhas do Distutils, para encontrar o caminho que realmente passa por dentro
setup.py
. Foi uma dor de cabeça descobrir que eu não quero que ninguém tenha que descobrir isso de novo.Isso deve imprimir algo como
/Lib/site-packages
ou/lib/python3.6/site-packages
.fonte
Se já estiver adicionado ao,
PYTHONPATH
você também pode fazer algo comofonte