use - python pip docs




Instalar um pacote Python em um diretório diferente usando pip? (10)

Eu sei que a resposta óbvia é usar virtualenv e virtualenvwrapper, mas por várias razões eu não posso / não quero fazer isso.

Então, como modifico o comando

pip install package_name

fazer pip instalar o pacote em algum lugar diferente dos site-packages padrão?


A opção --target é a coisa que você está procurando:

pip install --target = d: \ em algum lugar \ outro \ que \ o \ default package_name

Mas você ainda precisa adicionar d:\somewhere\other\than\the\default para PYTHONPATH para realmente usá-los a partir desse local.

Upgrade pip se o switch de destino não estiver disponível:

No Linux ou OS X:

pip install -U pip

No Windows (isso funciona em torno de um problema ):

python -m pip install -U pip

Basta adicionar um ponto à resposta do @Ian Bicking:

Usar a opção --user para especificar o diretório instalado também funciona se alguém quiser instalar algum pacote Python em seu diretório pessoal (sem direito de usuário sudo) no servidor remoto.

Por exemplo,

pip install --user python-memcached

O comando instalará o pacote em um dos diretórios listados em seu PYTHONPATH.


Em vez da opção --target ou da --install-options , descobri que o seguinte funciona bem (a partir da discussão de um bug sobre isso mesmo em https://github.com/pypa/pip/issues/446 ):

PYTHONUSERBASE=/path/to/install/to pip install --user

(Ou configure o diretório PYTHONUSERBASE em seu ambiente antes de executar o comando, usando export PYTHONUSERBASE=/path/to/install/to )

Isto usa a muito útil opção --user mas diz para fazer o bin , lib , share e outros diretórios que você esperaria sob um prefixo customizado ao invés de $HOME/.local .

Então você pode adicionar isto ao seu PATH , PYTHONPATH e outras variáveis ​​como se fosse um diretório de instalação normal.

Observe que você também pode precisar especificar as --upgrade e --ignore-installed se algum pacote do qual isto dependa requerer que versões mais novas sejam instaladas no diretório PYTHONUSERBASE , para sobrescrever as versões fornecidas pelo sistema.

Um exemplo completo:

PYTHONUSERBASE=/opt/mysterypackage-1.0/python-deps pip install --user --upgrade numpy scipy

..para instalar as versões mais recentes do pacote scipy e numpy num diretório que você pode incluir no seu PYTHONPATH assim (usando o bash e o python 2.6 no CentOS 6 para este exemplo):

export PYTHONPATH=/opt/mysterypackage-1.0/python-deps/lib64/python2.6/site-packages:$PYTHONPATH
export PATH=/opt/mysterypackage-1.0/python-deps/bin:$PATH

Usar o virtualenv ainda é uma solução melhor e mais limpa!


Eu sugiro seguir a documentação e criar o arquivo ~ / .pip / pip.conf. Observe na documentação que falta o diretório de cabeçalho especificado, o que leva ao seguinte erro:

error: install-base or install-platbase supplied, but installation scheme is incomplete

O conteúdo completo de trabalho do arquivo conf é:

[install]
install-base=$HOME
install-purelib=python/lib
install-platlib=python/lib.$PLAT
install-scripts=python/scripts
install-headers=python/include
install-data=python/data

Infelizmente eu posso instalar, mas quando tentar desinstalar o pip me diz que não existe tal pacote para o processo de desinstalação .... então algo ainda está errado, mas o pacote vai para o seu local pré-definido.


Ninguém parece ter mencionado a opção -t, mas o mais fácil:

pip install -t <direct directory> <package>

Para adicionar ao conselho já bom, como eu tive um problema de instalação do IPython quando eu não tinha permissões de gravação para /usr/local .

O pip usa distutils para fazer sua instalação e este thread discute como isso pode causar um problema, pois depende da configuração sys.prefix .

Meu problema aconteceu quando a instalação do IPython tentou gravar em '/ usr / local / share / man / man1' com Permission denied . Quando a instalação falhou, não pareceu gravar os arquivos IPython no diretório bin.

Usando "--user" funcionou e os arquivos foram gravados em ~ / .local. Adicionar ~ / .local / bin ao $ PATH significa que eu poderia usar o "ipython" de lá.

No entanto, estou tentando instalar isso para vários usuários e recebi permissão de gravação para o diretório /usr/local/lib/python2.7 . Eu criei um diretório "bin" e defini diretivas para distutils:

vim ~/.pydistutils.cfg

[install]
install-data=/usr/local/lib/python2.7
install-scripts=/usr/local/lib/python2.7/bin

então ( -I é usado para forçar a instalação apesar das falhas anteriores / instalação local):

pip install -I ipython

Então eu adicionei /usr/local/lib/python2.7/bin para $PATH .

Eu pensei em incluir isso no caso de alguém ter problemas semelhantes em uma máquina para a qual não tenha acesso ao sudo.


Se você estiver usando brew com python, infelizmente, o pip / pip3 vem com opções muito limitadas. Você não tem opções --install-option, --target, --user como mencionado acima.

Note sobre a instalação do pip - usuário
A instalação normal do pip --user está desativada para Python fabricado. Isto é devido a um bug nos distutils, porque o Homebrew escreve um distutils.cfg que define o prefixo do pacote. Uma possível solução alternativa (que coloca scripts executáveis ​​em ~ / Library / Python /./ bin) é: python -m pip install --user --install-option="--prefix=" <package-name>

Você pode achar esta linha muito complicada. Eu sugiro usar pyenv para gerenciamento. Se você estiver usando

brew upgrade python python3

Ironicamente, você está realmente desatualizando a funcionalidade pip.

(Eu posto esta resposta, simplesmente porque pip no meu mac osx não tem --target opção, e passei horas consertando isso)


Testado essas opções com python3.5 e pip 9.0.3:

pip install --target / myfolder [pacotes]

Instala TODOS os pacotes, incluindo dependências em / myfolder. Não leva em consideração que os pacotes dependentes já estão instalados em outro lugar no Python. Você encontrará pacotes em / myfolder / [package_name]. Caso você tenha várias versões do Python, isso não leva isso em conta (nenhuma versão do Python no nome da pasta do pacote).

pip install --prefix / myfolder [pacotes]

Verificações são dependências já instaladas. Instalará pacotes em /myfolder/lib/python3.5/site-packages/[packages]

pip install --root / myfolder [pacotes]

Verifica dependências como --prefix mas o local de instalação será /myfolder/usr/local/lib/python3.5/site-packages/[package_name].

pip install --user [pacotes]

Irá instalar pacotes em $ HOME: /home/[USER]/.local/lib/python3.5/site-packages O Python pesquisa automaticamente a partir desse caminho .local para que você não precise colocá-lo no seu PYTHONPATH.

=> Na maioria dos casos - o usuário é a melhor opção para usar. Caso a pasta home não possa ser usada por alguma razão, então --prefix.


Versões mais recentes do pip (8 ou posterior) podem usar diretamente a opção --prefix :

pip install --prefix=$PREFIX_PATH package_name

onde $PREFIX_PATH é o prefixo de instalação onde lib, bin e outras pastas de nível superior são colocadas.


pip install /path/to/package/

agora é possível.

A diferença com isso e usando o sinalizador -e ou --editable é que -e liga para onde o pacote é salvo (ou seja, sua pasta de downloads), em vez de instalá-lo em seu caminho de python.

Isso significa que, se você excluir / mover o pacote para outra pasta, não poderá usá-lo.





pip