Por que o pip instalou um pacote em ~/.local/bin?

Por que o pip instalou um pacote em ~/.local/bin?

Quando instalo este programa "Taurus Blazemeter 'bzt'" com pip, ele acaba sendo instalado na ~/.local/bin pasta.

mkdir ~/bzt && cd ~/bzt
sudo apt-get install python default-jre-headless python-tk python-pip python-dev libxml2-dev libxslt-dev zlib1g-dev
sudo pip install bzt

Alguém sabe ~/.localpara que serve esta pasta e por que um programa Python como este seria instalado lá?

Responder1

A resposta curta é que esse ~/.local/biné o valor padrão do diretório de scripts do usuário do Python e que pippode instalar executáveis ​​nesse diretório se executar uma instalação local do usuário. Ele também pode instalar arquivos em outros subdiretórios de ~/.local, que é o valor padrão do Diretório Base do Usuário. Mais detalhes abaixo.


Não tenho certeza se esta é a introdução mais antiga, mas o ~/.localdiretório aparece noespecificação de hierarquia do sistema de arquivosdosistemasistema init, onde define vários subdiretórios de ~/.local:

~/.local/bin

Executáveis ​​que devem aparecer no caminho de busca $PATH do usuário. É recomendado não colocar neste diretório executáveis ​​que não sejam úteis para invocação de um shell; eles devem ser colocados em um subdiretório de ~/.local/lib. Deve-se ter cuidado ao colocar binários dependentes de arquitetura neste local, o que pode ser problemático se o diretório inicial for compartilhado entre vários hosts com arquiteturas diferentes.

~/.local/lib

Dados estáticos e privados do fornecedor, compatíveis com todas as arquiteturas.

~/.local/lib/arch-id

Local para colocação de bibliotecas públicas dinâmicas. O identificador de arquitetura a ser usado é definido na lista Multiarch Architecture Specifiers (Tuples).

~/.local/share

Recursos compartilhados entre vários pacotes, como fontes ou arte. Normalmente, a localização precisa e o formato dos arquivos armazenados abaixo deste diretório estão sujeitos a especificações que garantem a interoperabilidade. Se um aplicativo encontrar o conjunto $XDG_DATA_HOME, ele deverá usar o diretório especificado nele em vez deste diretório.

A adoção do ~/.localdiretório pelo Python parece ter sido introduzida no Python 2.6 e está documentada no PEP (Python Enhancement Proposal) 370:

A especificação inclui as seguintes definições para sistemas Unix (incluindo Mac OS X).

  • Diretório base de usuários

    ~/.local

  • Diretório de script do usuário:

    ~/.local/bin

  • Diretório de sites do usuário:

    ~/.local/lib/python2.6/site-packages

  • Diretório de dados do usuário:

    ~/.local/lib/python2.6

Disto podemos concluir que Python tem o conceito do chamado "Diretório de usuários base" e que seu valor padrão é ~/.local. O Diretório de Usuário Base é discutido noDocumentação Python para o sitemódulo. Em particular, ele fornece métodos para determinar os valores do diretório base do usuário e do diretório do site do usuário, os sinalizadores de opções --user-basee --user-site. Você poderia usá-los assim:

user@host:~$ python -m site --user-base

/home/user/.local

user@host:~$ python -m site --user-site

/home/user/.local/lib/python2.7/site-packages

Existem várias perguntas postadas nos sites StackExchange relacionadas ao ~/.localdiretório que usei como referência:

informação relacionada