Sei que a resposta óbvia é usar virtualenv e virtualenvwrapper, mas por várias razões, não posso / não quero fazer isso.
Então, como eu modifico o comando
pip install package_name
fazer pip
instalar o pacote em outro lugar que não seja o padrão site-packages
?
pip
NÃO tentar remover a versão anterior de um diretório não personalizado. Por exemplo - em todo o sistema, em que você não tem permissões de gravação. Até agora, eu só consegui isso comeasy_install
...--ignore-installed
opção deve impedir o pip de tentar desinstalar os pacotes já instalados.mkvirtualenv --python=/usr/bin/python3.5 env_name
Respostas:
Usar:
Você também pode usar
--ignore-installed
para forçar a reinstalação de todas as dependências usando esse novo prefixo. Você pode usar--install-option
várias vezes para adicionar qualquer uma das opções com as quais você pode usarpython setup.py install
(--prefix
provavelmente é o que você deseja, mas há muito mais opções que você pode usar).fonte
pip freeze
de ver o diretório alternativo?PYTHONPATH=$PREFIX_PATH/lib/python2.6/site-packages pip freeze
, deve vê-los.--prefix=$PREFIX_PATH
não parece ter controle total do diretório de instalação, pois há um sufixo específico do sistema anexado a ele (\Lib\site-packages
no Windows, por exemplo). Existe uma maneira de especificar um diretório específico?A opção --target é o que você procura:
Mas você ainda precisa adicionar
d:\somewhere\other\than\the\default
paraPYTHONPATH
realmente usá-los a partir desse local.Atualize o pip se o switch de destino não estiver disponível:
No Linux ou OS X:
No Windows (isso funciona em um problema ):
fonte
pip install --upgrade pip
!--install-option="--prefix=$PREFIX_PATH"
mencionada por @Ian Bicking e a--target=$PATH
opção?target
é uma opção de pip e tudo o que você colocarinstall-option
será passado para osetup.py install command
. Basicamente,target
é a localização de pacotes de sites personalizados.--target
pode resultar em uma instalação parcial, pois não instalará nenhum arquivo de scripts / dados incluindo no prefixo especificado. Parece que passar--prefix
com--install-option
é a única maneira adequada de ter controle total sobre o prefixo das instalações usadas.Em vez da
--target
opção ou do--install-options
opção, descobri que o seguinte funciona bem (da discussão de um bug relacionado a isso em https://github.com/pypa/pip/issues/446 ):(Ou defina o
PYTHONUSERBASE
diretório em seu ambiente antes de executar o comando, usandoexport PYTHONUSERBASE=/path/to/install/to
)Isso usa a
--user
opção muito útil, mas diz para fazer obin
,lib
,share
e outros diretórios que você esperaria em um prefixo personalizado em vez de$HOME/.local
.Então você pode adicionar isso ao seu
PATH
,PYTHONPATH
e outras variáveis, como faria um diretório de instalação normal.Observe que você também pode precisar especificar o
--upgrade
e--ignore-installed
opções se algum pacote do qual isso depende exigir a instalação de versões mais recentes noPYTHONUSERBASE
diretório, para substituir as versões fornecidas pelo sistema.Um exemplo completo:
..para instalar as versões mais recentes
scipy
enumpy
empacotadas em um diretório que você pode incluir no seuPYTHONPATH
como quiser (usando o bash e o python 2.6 no CentOS 6 para este exemplo):Usar o virtualenv ainda é uma solução melhor e mais limpa!
fonte
/bin
pasta que o pip cria,--user
cria como faz,--PREFIX
enquanto--target
não.--ignore-installed
é necessário.--editable
e instalações locais.su
aí (o que pode ser problemático em contêineres, por exemplo).A instalação de um pacote Python geralmente inclui apenas alguns arquivos Python puros. Se o pacote incluir dados, scripts e / ou executáveis, eles serão instalados em diretórios diferentes dos arquivos Python puros.
Supondo que seu pacote não possua dados / scripts / executáveis e que você queira que seus arquivos Python entrem
/python/packages/package_name
(e não em algum subdiretório alguns níveis abaixo,/python/packages
como no uso--prefix
), você pode usar o comando one time:Se você deseja que todos (ou a maioria) de seus pacotes cheguem lá, você pode editar seu
~/.pip/pip.conf
para incluir:Dessa forma, você não pode esquecer a necessidade de especificá-lo repetidamente.
Quaisquer arquivos executáveis / dados / scripts incluídos no pacote ainda irão para seus locais padrão, a menos que você especifique opções adicionais de instalação (
--prefix
/--install-data
/--install-scripts
, etc., para obter detalhes, veja as opções de instalação personalizadas ).fonte
--prefix
lá, porque tenho um diretório "local" em um servidor compartilhado no diretório inicial e ele foi usado como o prefixoeasy_install
antes de mudar parapip
. Sistema$PATH
e$PYTHONPATH
foram configurados antes. Em vez deinstall-option=--install-purelib=/blah
existir estatarget=/blah
opção / opção mais recente . Também é bom, mas às vezes você precisa apenas de um substituto para--prefix
usar comsetup.py
oueasy_install
.Para instalar uma biblioteca exatamente onde eu queria, naveguei até o local em que queria o diretório com o terminal e depois usei
cuja lógica tirei desta página: https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download
fonte
-t
é uma abreviação de #--target
Parece que ninguém mencionou a opção -t, mas a mais fácil:
fonte
-t
opção é a versão curta da--target
opção que tem sido descrito em outra resposta ( stackoverflow.com/a/19404371/594053 ) :)Basta adicionar um ponto à resposta de @Ian Bicking:
Usar a
--user
opção para especificar o diretório instalado também funciona se alguém quiser instalar algum pacote Python no diretório pessoal (sem o usuário sudo certo) no servidor remoto.Por exemplo,
O comando instalará o pacote em um dos diretórios listados em seu PYTHONPATH.
fonte
Testou estas 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 conta que 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 consideração (nenhuma versão do Python no nome da pasta do pacote).
pip install --prefix / myfolder [pacotes]
Cheques são dependências já instaladas. Instalará pacotes no /myfolder/lib/python3.5/site-packages/[packages]
pip install --root / myfolder [pacotes]
Verifica dependências como --prefix, mas o local da instalação será /myfolder/usr/local/lib/python3.5/site-packages/[package_name].
pip install --user [pacotes]
Irá instalar pacotes no $ HOME: /home/[USER.la/.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 --user é a melhor opção para usar. Caso a pasta inicial não possa ser usada por algum motivo, --prefixo.
fonte
As versões mais recentes do
pip
(8 ou posterior) podem usar diretamente a--prefix
opção :onde
$PREFIX_PATH
é o prefixo de instalação em que lib, bin e outras pastas de nível superior são colocadas.fonte
ou
fonte
Para adicionar o conselho já bom, como tive um problema ao instalar o IPython quando não tinha permissão de gravação
/usr/local
.O pip usa distutils para fazer sua instalação e este tópico discute como isso pode causar um problema, pois depende do
sys.prefix
configuração.Meu problema ocorreu quando a instalação do IPython tentou gravar em '/ usr / local / share / man / man1' com a permissão negada . Como 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" a partir daí.
No entanto, estou tentando instalar isso para vários usuários e recebi permissão de gravação no
/usr/local/lib/python2.7
diretório. Eu criei um diretório "bin" lá e defina diretivas para distutils:then (
-I
é usado para forçar a instalação apesar das falhas anteriores / instalação .local):Então eu adicionei
/usr/local/lib/python2.7/bin
a$PATH
.Pensei em incluir isso no caso de alguém ter problemas semelhantes em uma máquina à qual não tem acesso ao sudo.
fonte
Se você estiver usando o brew com python, infelizmente, o pip / pip3 é enviado com opções muito limitadas. Você não possui as opções --install-option, --target, --user, conforme mencionado acima.
Você pode achar essa linha muito complicada. Sugiro usar pyenv para gerenciamento. Se você estiver usando
brew upgrade python python3
Ironicamente, você está na verdade rebaixando a funcionalidade do pip.
(Eu posto esta resposta, simplesmente porque o pip no meu mac osx não tem a opção --target e passei horas corrigindo-a)
fonte
ignore-installed
devido a esforços anteriores, funcionou para mim:python -m pip install --user --install-option="--prefix='/myFunkyApp/lib'" --ignore-installed <package-name>
Com o pip
v1.5.6
on Pythonv2.7.3
(GNU / Linux), a opção--root
permite especificar um prefixo de instalação global (aparentemente) independentemente das opções específicas do pacote. Tente fi,fonte
Sugiro seguir a documentação e criar o arquivo ~ / .pip / pip.conf. Observe na documentação que está faltando o diretório de cabeçalho especificado, o que leva ao seguinte erro:
O conteúdo completo do arquivo conf é:
Infelizmente, eu posso instalar, mas quando tenta desinstalar o pip, diz-me que não existe esse pacote para o processo de desinstalação ... então algo ainda está errado, mas o pacote vai para o local predefinido.
fonte
pip install /path/to/package/
agora é possível.
A diferença disso e usar o sinalizador
-e
ou--editable
é que os-e
links para onde o pacote está salvo (por exemplo, sua pasta de downloads), em vez de instalá-lo no seu caminho python.Isso significa que, se você excluir / mover o pacote para outra pasta, não poderá usá-lo.
fonte
Eu encontrei maneira simples
fonte - https://pip.pypa.io/en/stable/reference/pip_install/
Eu tentei com o pip3 e funciona!
fonte