De pip install --help
:
--user Install to the Python user install directory for your platform. Typically ~/.local/, or %APPDATA%\Python on
Windows. (See the Python documentation for site.USER_BASE for full details.)
A documentação do site.USER_BASE é um buraco de minhoca aterrorizante de um assunto interessante do * NIX que eu não entendo.
Qual é o propósito --user
em inglês simples? Por que instalar o pacote é ~/.local/
importante? Por que não colocar um executável em algum lugar do meu $ PATH?
python
python-3.x
pip
virtualenv
Rob Truxal
fonte
fonte
import site; print site.USER_SITE
imprimir o local da instalação. Para mim eu tenho/${HOME}/.local/lib/python${PY_MAJOR}.${PY_MINOR}/site-packages
./usr/local/lib/pythonX.X/dist-packages
é o diretório padrão para pacotes instalados pelo pip . Mas se um usuário quiser instalar pacotes específicos do usuário, ele poderá usá-lo$ sudo pip3 --user install some_package
. Esse pacote permanecerá indisponível para grupos e outras pessoas que acessam esse host.Respostas:
o padrão do pip para instalar pacotes Python em um diretório do sistema (como
/usr/local/lib/python3.4
). Isso requer acesso root.--user
cria pacotes de instalação do pip em seu diretório pessoal, o que não requer privilégios especiais.fonte
--user
garantir que um pacote não seja executado como root? (Estou imaginando algo semelhante a como Wireshark / kismet / burpsuite opções para configurar políticas de grupo de acesso, assim não permitindo que todos os recursos do programa a ser executado como root. É que no caminho certo?) Ou é a--user
opção apenas significou para permitir a instalação sem privilégios de root? Se for esse o caso, por que nunca usosudo pip install foo_package
? Eu nunca precisei de privilégios de root para instalar via pip antes.--user
parâmetro é sobre isolamento do usuário! Isso faz uma espécie de sentido ridículo. Obrigado @NDEthos!pip freeze --user
?--user
instala nosite.USER_SITE
.Para o meu caso, foi
/Users/.../Library/Python/2.7/bin
. Então, eu adicionei isso ao meu PATH (no~/.bash_profile
arquivo):fonte
Outras respostas mencionam
site.USER_SITE
como onde os pacotes Python são colocados. Se você está procurando binários, eles entram{site.USER_BASE}/bin
.Se você deseja adicionar este diretório ao caminho de pesquisa do seu shell, use:
fonte
Apenas um aviso:
De acordo com esse problema ,
--user
atualmente não é válido dentro de um ambiente virtualpip
, pois a localização do usuário não faz muito sentido para um ambiente virtual.Portanto, não use
pip install --user some_pkg
dentro de um ambiente virtual , caso contrário, os ambientes virtuaispip
serão confusos. Veja esta resposta para mais detalhes.fonte
A melhor maneira é instalar
virtualenv
e não exigir a--user
confusão. Você terá mais flexibilidade e não se preocupará em adotar as diferentes versões e projetos do python toda vez que instalar um pacote.https://virtualenv.pypa.io/en/stable/
fonte
No macOS, o motivo para usar o
--user
sinalizador é garantir que não corrompamos as bibliotecas nas quais o sistema operacional se baseia. Uma abordagem conservadora para muitos usuários do macOS é evitar instalar ou atualizar o pip com um comando que exijasudo
. Portanto, isso inclui a instalação no/usr/local/bin
...Ref: Instalando python para Neovim ( https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim )
Não sei ao certo por que a instalação no
/usr/local/bin
arrisca em um Mac, considerando que o sistema depende apenas de binários python em/Library/Frameworks/
e/usr/bin
. Eu suspeito que é porque, como mencionado acima, a instalação no/usr/local/bin
requer osudo
que abre a porta para cometer um erro caro com as bibliotecas do sistema. Assim, a instalação~/.local/bin
é uma maneira segura de evitar esse risco.Ref: Usando python em um Mac ( https://docs.python.org/2/using/mac.html )
Finalmente, na medida em que há um benefício em instalar pacotes no
/usr/local/bin
, pergunto-me se faz sentido alterar o proprietário do diretório deroot
parauser
? Isso evitaria ter que usarsudo
enquanto ainda protegia contra fazer alterações dependentes do sistema. * Esse padrão de segurança é uma relíquia de como os sistemas Unix foram usados com mais frequência no passado (como servidores)? Ou, no mínimo, apenas uma boa maneira de os usuários de Mac não hospedarem um servidor?* Nota: O recurso System Integrity Protection (SIP) do Mac também parece proteger o usuário de alterar as bibliotecas dependentes do sistema.
- E
fonte
Sem ambientes virtuais
pip <command> --user
altera o escopo do comando pip atual para trabalhar no local de instalação do pacote python local da conta de usuário atual, em vez do local de instalação do pacote em todo o sistema, que é o padrão.Isso realmente importa apenas em uma máquina multiusuário. Qualquer coisa instalada no local do sistema ficará visível para todos os usuários; portanto, a instalação no local do usuário manterá a instalação do pacote separada dos outros usuários (eles não o verão e precisariam instalá-lo separadamente para usá-lo). Como pode haver conflitos de versão, a instalação de um pacote com dependências necessárias para outros pacotes pode causar problemas; portanto, é melhor não enviar todos os pacotes que um determinado usuário usa para o local de instalação do sistema.
--user
local. Ele será instalado em uma pasta diferente, que pode ou não precisar ser adicionada ao caminho, dependendo do pacote e de como é usado (muitos pacotes instalam ferramentas de linha de comando que devem estar no caminho para executar a partir de um shell) .--user
é preferível usar root / sudo ou exigir a instalação do administrador e afetar o ambiente Python de cada usuário, exceto nos casos de pacotes gerais que o administrador deseja disponibilizar a todos os usuários por padrão.apt
, em vez depip
.Com ambientes virtuais
venv
comando nos documentos Python VENV .A
--user
opção em um ambiente venv / virtualenv ativo será instalada no local python do usuário local (o mesmo que sem um ambiente virtual).Os pacotes são instalados no ambiente virtual por padrão, mas se você
--user
o forçar a instalar fora dos ambientes virtuais, no diretório de scripts python dos usuários (no Windows, atualmente éc:\users\<username>\appdata\roaming\python\python37\scripts
para mim com o Python 3.7).No entanto, você não poderá acessar uma instalação do sistema ou do usuário de dentro do ambiente virtual (mesmo que você tenha usado
--user
em um ambiente virtual).Se você instalar um ambiente virtual com o
--system-site-packages
argumento, terá acesso à pasta de scripts do sistema para python. Eu acredito que isso incluiu a pasta de script python do usuário também, mas não tenho certeza. No entanto, pode haver consequências indesejadas para isso e não é a maneira pretendida de usar ambientes virtuais.Localização do sistema Python e das pastas de instalação do usuário local
Você pode encontrar o local da pasta de instalação do usuário para python com
python -m site --user-base
. Estou encontrando informações conflitantes nas perguntas e respostas, na documentação e, na verdade, usando este comando no meu PC para saber quais são os padrões, mas eles estão sob o diretório inicial do usuário (~
atalho em * nix e,c:\users\<username>
normalmente, no Windows).Outros detalhes
A
--user
opção não é válida para todos os comandos. Por exemplopip uninstall
, encontrará e desinstalará os pacotes onde quer que estejam instalados (na pasta do usuário, na pasta do ambiente virtual etc.) e a--user
opção não é válida.Os itens instalados
pip install --user
serão instalados em um local local que será visto apenas pela conta de usuário atual e não exigirá acesso root (no * nix) ou acesso de administrador (no Windows).A
--user
opção modifica todos ospip
comandos que o aceitam para ver / operar na pasta de instalação do usuário, portanto, se você usá-pip list --user
lo, apenas mostrará os pacotes instaladospip install --user
.fonte
pip install
sem o--user
inteiramente. Isso instalaria pacotes Python em lugares que realmente deveriam ser deixados para o gerenciador de pacotes do sistema (por exemplo,apt
no Debian / Ubuntu). É melhor não mexer com isso, isso leva a muitos problemas. Se um pacote Python precisar estar disponível para todos os usuários, use o gerenciador de pacotes do sistema operacional, mas não o façasudo pip install ...
. Uma alternativa ésudo pip install --target ...
. No Windows, é menos um problema.~/.local/bin directory
é teoricamente esperado que você esteja no seu$PATH
.De acordo com essas pessoas , é um erro não adicioná-lo
$PATH
ao usarsystemd
.Esta resposta explica mais amplamente.
Mas mesmo se a sua distro inclui o
~/.local/bin
diretório ao$PATH
, pode ser na forma seguinte (dentro~/.profile
):o que exigiria o logout e o login novamente , se o diretório não estivesse lá antes.
fonte