pip install numpy
no python 2.7 tenta instalar o numpy 1.17, que eliminou o suporte ao python 2.7. Isso é contrário à funcionalidade descrita na NEP 14 , que afirma:
...
pip install numpy
no Python 2 continuará a dar a última versão funcional para sempre ...
versão pip: 19.2.2
python: 2.7.15 | Anaconda, Inc. | (padrão, 23 de outubro de 2018, 18:31:10) n [GCC 7.3.0]
Parece haver um bug no pip ou setuptools que causa isso. Você pode tentar atualizar o pip? (veja também gh-13911, que espero ser uma duplicata). Você provavelmente pode atualizar o pip com o próprio pip: python -m pip install --upgrade pip
e python -m pip install --upgrade setuptools
?
a verdadeira questão é por que você está usando o python 2.7
a verdadeira questão é por que você está usando o python 2.7
há muitos motivos válidos para ainda executar o 2.7, por favor, não comece esse debate aqui.
Parece haver um bug no pip ou setuptools que causa isso. Você pode tentar atualizar o pip? (veja também gh-13911, que espero ser uma duplicata). Você provavelmente pode atualizar o pip com o próprio pip:
python -m pip install --upgrade pip
epython -m pip install --upgrade setuptools
?
Estou executando as versões mais recentes de ambos - pip 19.2.2 e setuptools 41.1.0.
a verdadeira questão é por que você está usando o python 2.7
há muitos motivos válidos para ainda executar o 2.7, por favor, não comece esse debate aqui.
Na verdade, existem. No meu caso, estou tentando executar um software de análise científica desenvolvido academicamente que não foi portado para o py3.
Mas a questão aqui não é se devo ou não usar o python 2.7, é que numpy fez uma declaração formal da funcionalidade esperada, e não é a verdadeira funcionalidade. Esse, em minha opinião, é o bug.
Percebi ontem que o pip não instalava o pytest 5.0.1 para Python 2.7 porque o 2.7 não era compatível, então o pip está funcionando corretamente em alguns casos. Gostaria de saber se há alguma informação em algum lugar que precisa de atualização para 1.17?
Você pode tentar python2.7 -mpip
para ter certeza de que o pip sabe qual versão está sendo executada. Também parece que você está usando o Anaconda, o que pode ser uma complicação quando misturado com o pip.
O que which pip
mostra?
Hmmm, na minha máquina, o pip 18.1 e o setuptools 41.0.1 funcionam bem (no modo binário e sem binário). Atualizar para 19.2.2 e 41.1.0 não muda nada para mim. A versão python é 2.7.16+
(debian).
Como Chuck observa, presumo que você certifique-se de usar python2.7 -mpip
vez de pip
para ter certeza de obter a versão instalada mais recente (no caso de você estar usando --user
ou ter outra versão pip por algum motivo.)?
Seria muito bom entender o que exatamente está causando isso.
@IPetrik você seria capaz de montar um exemplo completamente reproduzível? Você está usando o Anaconda, então algo como:
conda create -n py27-empty
conda activate py27-empty
conda install pip
# Some diagnostics
which pip
pip --version
conda list setuptools
pip install numpy
Tentei várias variações disso, mas não consigo reproduzir o seu problema.
Depois de tentar preparar um exemplo mínimo, descobri o problema: usamos um servidor de cache devpi PyPI local que estava em meu pip.conf
como extra-index-url
. Se eu remover isso do meu pip.conf
, tudo funcionará bem ... opa.
Hmm, parece que o pip deve cuidar disso. Existe algo especial sobre o cache e pip.conf
? Não estou familiarizado com essas coisas. @njsmith Alguma ideia?
Gostaria de saber se o servidor devpi não está encaminhando a metainformação sobre as versões disponíveis para um determinado pacote de forma adequada.
Encontrou um motivo pelo qual um novo pip
pode tentar instalar 1.17.0 para Python 2.7. Isso acontece quando um pacote usa setup_requires='numpy'
. Isso ocorre porque isso invocará easy_install
menos que o pacote tenha um pyproject.toml
(consulte https://github.com/pypa/pip/issues/6945#issuecomment-526479930).
Há uma solução alternativa: faça pip install numpy
explicitamente antes de pip install package-with-setup-requires
.
E a correção é: esse pacote deve adicionar um pyproject.toml
, que fará com que esse problema desapareça para uma nova versão desse pacote.
Encontrou um motivo pelo qual um novo
pip
pode tentar instalar 1.17.0 para Python 2.7. Isso acontece quando um pacote usasetup_requires='numpy'
. Isso ocorre porque isso invocaráeasy_install
menos que o pacote tenha umpyproject.toml
(consulte pypa / pip # 6945 (comentário) ).Há uma solução alternativa: faça
pip install numpy
explicitamente antes depip install package-with-setup-requires
.
Um caso concreto sendo pip install pycuda
, que falha assim:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-build-LYaxup/pycuda/setup.py", line 251, in <module>
main()
...
File "/usr/lib/python2.7/dist-packages/setuptools/sandbox.py", line 44, in _execfile
code = compile(script, filename, 'exec')
File "/tmp/easy_install-mp9NYd/numpy-1.19.0rc1/setup.py", line 182
raise ValueError(f'Submodule {p} missing')
^
SyntaxError: invalid syntax
A solução é simples, como @rgommers observou: primeiro execute pip install numpy==1.16.6
(para a última versão NumPy compatível com Python 2.7) e, em seguida, tente novamente pip install pycuda
.
Esse é um bug pip
, e parece muito sério. Posso reproduzir isso com o pip 20.1.1. pip-2.7 install numpy
instala corretamente 1.16.6
, então os metadados para numpy no PyPI estão corretos. pip-2.7 install pycuda
tenta instalar o numpy mais recente em vez de 1.16.6
.
Provavelmente isso já foi relatado, não tenho tempo para investigar isso nos próximos dias. @artob se você olhar se há um problema com o Pip para isso e abrir um caso contrário, ficaria muito grato.
Comentários muito úteis
há muitos motivos válidos para ainda executar o 2.7, por favor, não comece esse debate aqui.