A resposta curta é que ~/.local/bin
é o valor padrão do Diretório de Scripts de Usuário do Python e que pip
pode 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 essa é sua primeira introdução, mas o diretório ~/.local
aparece na especificação de hierarquia do sistema de arquivos do sistema init systemd , onde ele define vários subdiretórios de ~/.local
:
~/.local/bin
Executables that shall appear in the user's $PATH search path. It is recommended not to place executables in this directory that are not useful for invocation from a shell; these should be placed in a subdirectory of ~/.local/lib instead. Care should be taken when placing architecture-dependent binaries in this place, which might be problematic if the home directory is shared between multiple hosts with different architectures.
~/.local/lib
Static, private vendor data that is compatible with all architectures.
~/.local/lib/arch-id
Location for placing public dynamic libraries. The architecture identifier to use is defined on Multiarch Architecture Specifiers (Tuples) list.
~/.local/share
Resources shared between multiple packages, such as fonts or artwork. Usually, the precise location and format of files stored below this directory is subject to specifications that ensure interoperability. If an application finds $XDG_DATA_HOME set, it should use the directory specified in it instead of this directory.
A adoção do diretório ~/.local
pelo Python parece ter sido introduzida no Python 2.6 e está documentada em PEP (Python Enhancement Proposal) 370:
A especificação inclui as seguintes definições para sistemas Unix (incluindo o Mac OS X).
-
Diretório base do usuário
~/.local
-
Diretório de script de 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
A partir disso, podemos concluir que o Python tem o conceito de um "Diretório de Usuários Base" e que seu valor padrão é ~/.local
. O Diretório de Usuários Base é discutido na documentação do Python para o módulo site
. Em particular, ele fornece métodos para determinar os valores do seu Diretório base do usuário e do Diretório de sites do usuário, os sinalizadores --user-base
e --user-site
options. 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
Há várias perguntas postadas nos sites do StackExchange relacionadas ao diretório ~/.local
, que usei como referências: