pip install numpy
auf Python 2.7 versucht, numpy 1.17 zu installieren, wodurch die Unterstützung von Python 2.7 eingestellt wurde. Dies steht im Gegensatz zu der in NEP 14 beschriebenen Funktionalität, die besagt:
...
pip install numpy
auf Python 2 wird weiterhin die letzte funktionierende Version für immer geben...
Pip-Version: 19.2.2
Python: 2.7.15 |Anaconda, Inc.| (Standard, 23. Oktober 2018, 18:31:10) n[GCC 7.3.0]
Es scheint einen Fehler in pip oder setuptools zu geben, der dies verursacht. Können Sie versuchen, pip zu aktualisieren? (Siehe auch gh-13911, von dem ich erwarte, dass es ein Duplikat ist). Sie können pip wahrscheinlich mit pip selbst aktualisieren: python -m pip install --upgrade pip
und python -m pip install --upgrade setuptools
?
Die eigentliche Frage ist, warum Sie Python 2.7 verwenden
Die eigentliche Frage ist, warum Sie Python 2.7 verwenden
Es gibt viele triftige Gründe, 2.7 weiterhin auszuführen, bitte beginne diese Debatte nicht hier.
Es scheint einen Fehler in pip oder setuptools zu geben, der dies verursacht. Können Sie versuchen, pip zu aktualisieren? (Siehe auch gh-13911, von dem ich erwarte, dass es ein Duplikat ist). Sie können pip wahrscheinlich mit pip selbst aktualisieren:
python -m pip install --upgrade pip
undpython -m pip install --upgrade setuptools
?
Ich verwende die neuesten Versionen von beiden - pip 19.2.2 und setuptools 41.1.0.
Die eigentliche Frage ist, warum Sie Python 2.7 verwenden
Es gibt viele triftige Gründe, 2.7 weiterhin auszuführen, bitte beginne diese Debatte nicht hier.
Tatsächlich gibt es. In meinem Fall versuche ich, eine akademisch entwickelte wissenschaftliche Analysesoftware auszuführen, die nicht auf py3 portiert wurde.
Aber der Punkt hier ist nicht, ob ich Python 2.7 verwenden sollte oder nicht, es ist, dass numpy eine formale Aussage über die erwartete Funktionalität gemacht hat und es nicht die wahre Funktionalität ist. Das ist meiner Meinung nach der Fehler.
Mir ist gestern aufgefallen, dass pip pytest 5.0.1 für Python 2.7 nicht installieren würde, da 2.7 nicht unterstützt wurde, daher funktioniert pip in einigen Fällen korrekt. Ich frage mich, ob es irgendwo Informationen gibt, die für 1.17 aktualisiert werden müssen?
Sie können python2.7 -mpip
versuchen, um sicherzustellen, dass pip weiß, welche Version ausgeführt wird. Es sieht auch so aus, als ob Sie Anaconda verwenden, was beim Mischen mit Pip eine Komplikation sein kann.
Was zeigt which pip
?
Hmmm, auf meinem Computer funktionieren pip 18.1 und setuptools 41.0.1 einwandfrei (sowohl binärer als auch kein binärer Modus). Ein Upgrade auf 19.2.2 und 41.1.0 ändert für mich nichts. Die Python-Version ist 2.7.16+
(Debian).
Wie Chuck bemerkt, gehe ich davon aus, dass Sie python2.7 -mpip
anstelle von pip
, um sicherzustellen, dass Sie die neueste installierte Version erhalten (falls Sie --user
oder eine andere haben pip-Version aus irgendeinem Grund herum.)?
Es wäre wirklich gut zu verstehen, woran das genau liegt.
@IPetrik könnten Sie ein vollständig reproduzierbares Beispiel zusammenstellen? Sie verwenden Anaconda, also etwa:
conda create -n py27-empty
conda activate py27-empty
conda install pip
# Some diagnostics
which pip
pip --version
conda list setuptools
pip install numpy
Ich habe mehrere Varianten davon ausprobiert, kann dein Problem aber nicht reproduzieren.
Nachdem ich versucht hatte, ein Minimalbeispiel vorzubereiten, habe ich das Problem herausgefunden: Wir verwenden einen lokalen devpi-PyPI-Cache-Server, der sich in meinem pip.conf
als extra-index-url
. Wenn ich das aus meinem pip.conf
entferne, funktioniert alles richtig... Ups.
Hmm, es scheint, dass Pip damit umgehen sollte. Gibt es etwas Besonderes an dem Cache und pip.conf
? Ich bin mit diesen Dingen nicht vertraut. @njsmith Irgendwelche Ideen?
Ich frage mich, ob der Devpi-Server die Metainformationen zu den verfügbaren Versionen für ein bestimmtes Paket nicht ordnungsgemäß weiterleitet.
Es wurde ein Grund gefunden, warum ein neuer pip
versuchen kann, 1.17.0 für Python 2.7 zu installieren. Dies geschieht, wenn ein Paket setup_requires='numpy'
. Dies liegt daran, dass easy_install
aufgerufen wird, es sei denn, dieses Paket hat ein pyproject.toml
(siehe https://github.com/pypa/pip/issues/6945#issuecomment-526479930).
Es gibt eine Problemumgehung: Führen Sie explizit pip install numpy
vor pip install package-with-setup-requires
.
Und die Lösung ist: Dieses Paket sollte ein pyproject.toml
hinzufügen, wodurch dieses Problem für eine neue Version dieses Pakets behoben wird.
Es wurde ein Grund gefunden, warum ein neuer
pip
versuchen kann, 1.17.0 für Python 2.7 zu installieren. Dies geschieht, wenn ein Paketsetup_requires='numpy'
. Dies liegt daran, dasseasy_install
aufgerufen wird, es sei denn, dieses Paket hat einpyproject.toml
(siehe pypa/pip#6945 (Kommentar) ).Es gibt eine Problemumgehung: Führen Sie explizit
pip install numpy
vorpip install package-with-setup-requires
.
Ein konkreter Fall dafür ist pip install pycuda
, der wie folgt fehlschlägt:
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
Die Problemumgehung ist einfach, wie @rgommers bemerkte: pip install numpy==1.16.6
(für die letzte Python 2.7-kompatible NumPy-Version) und versuchen Sie es dann erneut mit pip install pycuda
.
Das ist ein pip
Fehler, und ein sehr ernster, wie es aussieht. Das kann ich mit pip 20.1.1 reproduzieren. pip-2.7 install numpy
installiert 1.16.6
pip-2.7 install numpy
korrekt, sodass die Metadaten für numpy auf PyPI korrekt sind. pip-2.7 install pycuda
versucht, das neueste numpy anstelle von 1.16.6
zu installieren.
Wahrscheinlich ist das schon gemeldet, ich habe in den nächsten Tagen keine Zeit, mich damit zu befassen. @artob Wenn Sie schauen, ob es ein Pip-Problem dafür gibt, und sonst eins öffnen, wäre das sehr willkommen.
Hilfreichster Kommentar
Es gibt viele triftige Gründe, 2.7 weiterhin auszuführen, bitte beginne diese Debatte nicht hier.