Instalando pacotes pip na pasta $ HOME

330

É possível? Ao instalar pip, instale os pacotes python dentro da minha $HOMEpasta. (por exemplo, eu quero instalar mercurial, usando pip, mas dentro, em $HOMEvez de /usr/local)

Estou com uma máquina mac e apenas pensei nessa possibilidade, em vez de "poluir" minha /usr/local, eu usaria a minha $HOME.

O PEP370 é exatamente sobre isso. É apenas criar um ˜/.locale fazer o pip install packagesuficiente para fazer com que esses pacotes sejam instalados apenas na minha pasta $ HOME?

Alguém ainda usa você no MS-DOS
fonte
Você já viu o virtualenv? Você pode instalar pacotes com pip em um ambiente isolado.
Joet3ch
2
Pensei sobre isso, mas gostaria de instalar alguns aplicativos python usando o python existente (2.6.1), mas em vez de instalar em / usr / local /, instale na minha pasta $ HOME e adicione-a ao $ PATH. Quero saber se é possível e quaisquer ressalvas dessa abordagem.
Alguém ainda usa o MS-DOS
11
+1 para promover o PEP370. Esta é uma opção simples, mas útil, que mais pessoas devem conhecer.
Ned Deily
Eu estava lutando com um problema semelhante (possivelmente causado por pip mal configurado e easy_install para dois pyhtons diferentes). Como último recurso, tentei usar simples $ python setup.py --user install. E funcionou. Agora o pacote está instalado no subdiretório home e tudo funciona conforme o esperado. Terá que conversar com o administrador do meu servidor.
Jan Vlcinsky
1
Se você precisar instalar o PIP, faça algo como o wget https://bootstrap.pypa.io/get-pip.pyseguido python get-pip.pye você estará pronto. Pode ser útil se você estiver em uma máquina em que o PIP instalado é muito antigo (foi o caso para mim). Consulte pip.readthedocs.org/en/latest/installing.html para obter mais informações.
Markus

Respostas:

463

Enquanto você pode usar a virtualenv, não precisa. O truque é passar o --userargumento PEP370 para o setup.pyscript. Com a versão mais recente do pip, uma maneira de fazer isso é:

pip install --user mercurial

Isso deve resultar na instalação do hgscript $HOME/.local/bin/hge no restante do pacote hg $HOME/.local/lib/pythonx.y/site-packages/.

Observe que o acima exposto é verdadeiro para o Python 2.6. Houve um pouco de controvérsia entre os principais desenvolvedores do Python sobre qual é o local apropriado do diretório no Mac OS X para userinstalações no estilo PEP370 . No Python 2.7 e 3.2, a localização no Mac OS X foi alterada de $HOME/.localpara $HOME/Library/Python. Isso pode mudar em uma versão futura. Mas, por enquanto, no 2.7 (e 3.2, se houver hgsuporte no Python 3), os locais acima serão $HOME/Library/Python/x.y/bin/hge $HOME/Library/Python/x.y/lib/python/site-packages.

Ned Deily
fonte
Bom ponto. Infelizmente, existe um bug no Python 2.7 que faz com que PYTHONUSERBASE seja ignorado nas compilações da estrutura do OS X. Será corrigido para o Python 2.7.3.
Ned Deily
1
Isso parece muito interessante. easy_installvem instalado no Mac OS X por padrão, então eu teria apenas o pip instalado fora da $HOMEpasta.
Alguém ainda usa o MS-DOS
1
Tentei alterar a PYTHONUSERBASE para outro local. Sem sucesso. Como isso é feito especificamente no Windows?
7893 Snerd
2
Cuidado, se você fizer isso e tentar usar ambientes conda, os arquivos instalados .localsempre serão atingidos primeiro, o que pode levar a erros de importação muito difíceis de rastrear.
Tacawell
12
Observe que no OSX, a pasta bin do diretório do site do usuário não está no PATH. Isso significa que os scripts instalados pelos pacotes no diretório do site do usuário não serão executáveis, a menos que você export PATH=$PATH:~/Library/Python/X.Y/bin/.
André Caron
21

Eu usaria o virtualenv no seu diretório HOME.

$ sudo easy_install -U virtualenv
$ cd ~
$ virtualenv .
$ bin/pip ...

Você também pode alterar ~/.(login|profile|bash_profile), o que for mais adequado para o seu shell adicionar ~ / bin ao seu PATH e esse pip|python|easy_installseria o usado por padrão.

Ross Patterson
fonte
9
A "de facto" maneira de fazer isso é virtualenv venv, source venv/bin/activate. Você pode não necessariamente querer sempre usar seu virtualenv e, usando esse método, seu prompt é prefixado (venv)quando você o está usando.
nyuszika7h
2
@ nyuszika7h Sabemos como usar o virtualenv. Mas isso realmente responde à pergunta e é uma solução muito elegante.
precisa saber é o seguinte
8
@itsafire Quem é "nós"? Eu recomendo que você leia en.wikipedia.org/wiki/Weasel_word
nyuszika7h
3
De qualquer forma, eu discordo, esta não é uma "solução pura". É um truque sem sentido.
precisa saber é o seguinte
19

Você pode especificar a -topção ( --target) para especificar o diretório de destino. Veja pip install --helppara informações detalhadas. Este é o comando que você precisa:

pip install -t path_to_your_home package-name

por exemplo, para instalar o say mxnet, no meu $HOMEdiretório, digite:

pip install -t /home/foivos/ mxnet
Foivos
fonte
Obtendo um erro distutils.errors.DistutilsOptionError: can't combine user with prefix, exec_prefix/home, or install_(plat)base. O que isso significa?
Anthony Kong
Verifique github.com/pypa/pip/issues/3826 para obter uma discussão relacionada. Não sei mais nada sobre isso, mas nunca encontrei um problema em meus ambientes.
Foivos