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.