Eu normalmente instalo pacotes python através do pip.
Para o Google App Engine, preciso instalar pacotes em outro diretório de destino.
Eu tentei:
pip install -I flask-restful --target ./lib
mas falha com:
deve fornecer home ou prefix / exec-prefix - não ambos
Como posso fazer isso funcionar?
pip install
operações normais :(--target
, sem arruinar opip install
comportamento padrão ?Acredito que exista uma solução mais simples para esse problema (o Python da Homebrew no macOS) que não interrompa suas operações normais de pip.
Tudo que você precisa fazer é criar um
setup.cfg
arquivo no diretório raiz do seu projeto, geralmente onde está o seu__init__.py
arquivo py principal ou executável. Portanto, se a pasta raiz do seu projeto for:,/path/to/my/project/
crie umsetup.cfg
arquivo e coloque as palavras mágicas dentro:OK, agora você poderá executar os comandos do pip para essa pasta:
Este comando será executado normalmente apenas para essa pasta. Basta copiar
setup.cfg
para quaisquer outros projetos que você possa ter. Não é necessário escrever um.pydistutils.cfg
no seu diretório pessoal.Depois de concluir a instalação dos módulos, você poderá removê-lo
setup.cfg
.fonte
setup.cfg
após a instalação. Eu queimei dois dias inteiros tentando descobrir por que meu ambiente de virtualenv estava ferrado, com erros do tipoCould not install packages due to an EnvironmentError: [Errno 1] Operation not permitted: '/bin/easy_install'
. Removendo o arquivo de instalação restaurou minha sanidadeNo OSX (mac), assumindo uma pasta do projeto chamada / var / myproject
cd /var/myproject
setup.cfg
e adicione[install] prefix=
pip install <packagename> -t .
fonte
-t .
vez de ficar fora do diretório. Dessa maneira, funcionou para mim e a outra não, embora eu não tenha idéia do porquê.Outra solução * para usuários do Homebrew é simplesmente usar a
virtualenv
.Obviamente, isso pode remover a necessidade do diretório de destino de qualquer maneira - mas mesmo se não houver, eu encontrei
--target
trabalhos por padrão (como em, sem criar / modificar um arquivo de configuração) quando em um ambiente virtual.* Eu digo solução; talvez seja apenas mais uma motivação para usar meticulosamente os venvs ...
fonte
Eu encontrei erros com as outras recomendações ao redor
--install-option="--prefix=lib"
. A única coisa que descobri que funcionou é usarPYTHONUSERBASE
como descrito aqui .isso não é exatamente o mesmo que
--target
, mas faz o truque para mim em qualquer caso.fonte
Como mencionado anteriormente, esse bug é conhecido com o pip & python instalado com o homebrew.
Se você criar um
~/.pydistutils.cfg
arquivo com a instrução "prefixo vazio", ele corrigirá esse problema, mas interromperá as operações normais do pip.Até que esse bug seja resolvido oficialmente, uma das opções seria criar seu próprio script bash que trataria desse caso:
Este script envolve seu comando e:
~/.pydistutils.cfg
arquivo com a instrução "prefixo vazio"~/.pydistutils.cfg
arquivoEste script pode ser alterado e adaptado para atender às suas necessidades, mas você tem uma idéia. E isso permite que você execute seu comando sem frear o pip. Espero que ajude :)
fonte
Se você estiver usando o virtualenv *, pode ser uma boa ideia verificar novamente
which pip
se está usando.Se você vir algo como
/usr/local/bin/pip
se tivesse saído do seu ambiente. A reativação do seu virtualenv corrigirá isso:VirtualEnv:
$ source bin/activate
VirtualFish:
$ vf activate [environ]
*: Eu uso o peixe virtual, mas suponho que essa dica seja relevante para ambos.
fonte
Eu tenho um problema semelhante. Uso o sinalizador --system para evitar o erro, como descrevo aqui em outro thread, onde explico o caso específico da minha situação. Eu posto isso aqui esperando que possa ajudar alguém que enfrenta o mesmo problema.
fonte