pip install numpy
на python 2.7 пытается установить numpy 1.17, из-за чего поддержка python 2.7 упала. Это противоречит функциональности, описанной в NEP 14 , в котором говорится:
...
pip install numpy
на Python 2 будет продолжать предоставлять последнюю рабочую версию на неограниченный срок ...
версия pip: 19.2.2
python: 2.7.15 | Anaconda, Inc. | (по умолчанию, 23 октября 2018 г., 18:31:10) n [GCC 7.3.0]
Кажется, есть ошибка в программе pip или setuptools, которая вызывает это, можете ли вы попробовать обновить pip? (см. также gh-13911, который, как я полагаю, является дубликатом). Вероятно, вы можете обновить pip с помощью самого pip: python -m pip install --upgrade pip
и python -m pip install --upgrade setuptools
?
настоящий вопрос в том, почему вы используете Python 2.7
настоящий вопрос в том, почему вы используете Python 2.7
есть много веских причин, чтобы по-прежнему запускать 2.7, пожалуйста, не начинайте здесь споры.
Кажется, есть ошибка в программе pip или setuptools, которая вызывает это, можете ли вы попробовать обновить pip? (см. также gh-13911, который, как я полагаю, является дубликатом). Вероятно, вы можете обновить pip с помощью самого pip:
python -m pip install --upgrade pip
иpython -m pip install --upgrade setuptools
?
Я использую последние версии обоих - pip 19.2.2 и setuptools 41.1.0.
настоящий вопрос в том, почему вы используете Python 2.7
есть много веских причин, чтобы по-прежнему запускать 2.7, пожалуйста, не начинайте здесь споры.
Действительно есть. В моем случае я пытаюсь запустить академически разработанное программное обеспечение для научного анализа, которое не было перенесено на py3.
Но дело здесь не в том, следует ли мне использовать python 2.7, а в том, что numpy сделал формальное заявление об ожидаемой функциональности, а это не настоящая функциональность. В этом, на мой взгляд, ошибка.
Вчера я заметил, что pip не устанавливает pytest 5.0.1 для Python 2.7, потому что 2.7 не поддерживается, поэтому в некоторых случаях pip работает правильно. Интересно, есть ли где-нибудь информация, которую нужно обновить до версии 1.17?
Вы можете попробовать python2.7 -mpip
чтобы убедиться, что pip знает, какая версия запущена. Также похоже, что вы используете Anaconda, что может вызвать затруднения при смешивании с pip.
Что показывает which pip
?
Хммм, на моей машине pip 18.1 и setuptools 41.0.1 работают нормально (как в двоичном, так и без двоичного режима). Обновление до 19.2.2 и 41.1.0 для меня ничего не меняет. Версия python - 2.7.16+
(debian).
Как отмечает Чак, я предполагаю, что вы используете python2.7 -mpip
вместо pip
чтобы быть уверенным, что у вас установлена самая новая версия (в случае, если вы используете --user
или другую версия pip по какой-то причине.)?
Было бы действительно хорошо понять, что именно вызывает это.
@IPetrik. Не могли бы вы собрать полностью воспроизводимый пример? Вы используете Anaconda, поэтому что-то вроде:
conda create -n py27-empty
conda activate py27-empty
conda install pip
# Some diagnostics
which pip
pip --version
conda list setuptools
pip install numpy
Я пробовал несколько вариантов этого, но не могу воспроизвести вашу проблему.
После попытки подготовить минимальный пример, я понял проблему: мы используем локальный кеш-сервер PyPI для devpi, который был в моем pip.conf
как extra-index-url
. Если я удалю это из своего pip.conf
, все будет работать правильно ... ой.
Хм, похоже, Пип должен с этим справиться. Есть ли что-то особенное в кеш-памяти и pip.conf
? Я не знаком с этими вещами. @njsmith Есть идеи?
Интересно, правильно ли сервер devpi пересылает метаинформацию о доступных версиях для данного пакета.
Обнаружена одна причина, по которой новый pip
может попытаться установить 1.17.0 для Python 2.7. Это происходит, когда пакет использует setup_requires='numpy'
. Это потому, что это вызовет easy_install
если в этом пакете не будет pyproject.toml
(см. Https://github.com/pypa/pip/issues/6945#issuecomment-526479930).
Есть обходной путь: явно выполните pip install numpy
перед pip install package-with-setup-requires
.
И исправление: этот пакет должен добавить pyproject.toml
, что устранит эту проблему в новом выпуске этого пакета.
Обнаружена одна причина, по которой новый
pip
может попытаться установить 1.17.0 для Python 2.7. Это происходит, когда пакет используетsetup_requires='numpy'
. Это потому, что это вызоветeasy_install
если этот пакет не имеетpyproject.toml
(см. Pypa / pip # 6945 (комментарий) ).Есть обходной путь: явно выполните
pip install numpy
передpip install package-with-setup-requires
.
Конкретный случай этого - pip install pycuda
, который не работает так:
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
Как заметил @rgommers, обходной путь прост: сначала выполните pip install numpy==1.16.6
(для последней версии NumPy, совместимой с Python 2.7), а затем повторите попытку pip install pycuda
.
Это ошибка pip
, и, похоже, она очень серьезная. Я могу воспроизвести это с помощью пункта 20.1.1. pip-2.7 install numpy
правильно устанавливает 1.16.6
, поэтому метаданные для numpy на PyPI верны. pip-2.7 install pycuda
пытается установить последнюю версию numpy вместо 1.16.6
.
Скорее всего, об этом уже сообщалось, у меня нет времени разбираться в этом в ближайшие дни. @artob, если вы посмотрите, есть ли проблема с Pip для этого, и откройте ее в противном случае, это будет очень признательно.
Самый полезный комментарий
есть много веских причин, чтобы по-прежнему запускать 2.7, пожалуйста, не начинайте здесь споры.