Python-future: Новый волшебный импорт "configparser" ломает бэкпорт "configparser"

Созданный на 16 окт. 2014  ·  13Комментарии  ·  Источник: PythonCharmers/python-future

В Python 3.x существует резервная копия изменений configparser, которая называется просто «configparser». С вашим недавно введенным импортом полиглотов ваш пакет может переопределить бэкпорт, например, будет невозможно использовать оба вместе.

Пожалуйста, рассмотрите возможность добавления бэкпорта configparser в список требований python-future, что решит эту проблему.

Самый полезный комментарий

С течением времени все больше и больше людей напрямую используют бэкпорт configparser, потому что это способ использовать новейший API-интерфейс (и функции) основной ветки разработки, оставаясь при этом на Python 2.x.

Таким образом, я не очень понимаю актуальность ваших неудачных тестов. Если вам нужен старый API, используйте старое имя модуля. Если вам нужен новый API, используйте новое имя. Больше нет смысла размещать 2.x ConfigParser там, где находится его замена Python 3.

Было бы неплохо иметь исправление для этого, так как я получил отчет об этом в Kali https://bugs.kali.org/view.php?id=3245 , а в типичной системе Kali Linux у меня есть пакеты, которым нужен как Python -future и python-configparser. За исключением того, что последний не работает для всех, кто использует его на Python 2.x из-за этой ошибки.

Подводя итог, я думаю, вам следует реализовать (1) и отказаться от тестов на configparser. (2) не является запретным, так как пакеты Debian создаются в минимальных средах, а python-configparser будет недоступен при запуске setup.py. (3) возможно, но это означает, что API python-future зависит от того, как он был установлен. Это действительно не очень хорошая идея, так как дистрибутив может быть установлен только одним способом.

Спасибо! копия @sbrun

Все 13 Комментарий

Кроме того, в репозитории бэкпорта люди уже сообщают, что это не работает: https://bitbucket.org/ambv/configparser/issue/8/configparser-import-broken-on-py27 .

На данный момент мне пришлось удалить зависимость от python-future в configparser, чтобы заставить его работать.

+1

В более общем плане python-future не должен устанавливать модули, которые затеняют другие установленные модули IMO. Большинство других вряд ли вызовут проблемы, поэтому может быть предпочтительнее просто сделать это, а не добавлять ложную зависимость.

@ambv , @Julian : Спасибо за ваш отзыв. Я хотел бы исправить это, но я пока не вижу правильного пути для продолжения. Вот варианты, как я это вижу:

  1. Удалите configparser из python-future и измените документы, чтобы вместо этого рекомендовалось использовать ваш пакет configparser . Это может иметь смысл, но только если configparser не является заменой ConfigParser в Py2.7. В настоящее время существует 14 сбоев и 9 ошибок при запуске test_cfgparser.py на Python 2.7.9 с установленным пакетом configparser после замены import ConfigParser на import configparser as ConfigParser . С установленным python-future и его простым псевдонимом configparser все те же тесты проходят.
  2. Измените setup.py в python-future, чтобы установить пакет псевдонимов configparser , только если модуль или пакет с таким же именем не существует. Недостатком этого будет то, что установленные пакеты будут зависеть от порядка, в котором они перечислены в requirements.txt . Хуже того, я считаю, что pip не гарантирует установку пакетов в том порядке, в котором они появляются в requirements.txt . Если бы были указаны и configparser , и future , это привело бы к тому, что набор пакетов, установленных pip , был бы недетерминированным.
  3. Используйте функцию extras в setuptools для поддержки варианта установки, такого как pip install future[without_configparser] .

Как вы думаете, можно ли изменить пакет configparser , чтобы набор тестов Python 2.7.9 проходил при его использовании? Это дало бы мне уверенность в том, что я рекомендую его для плавного обновления кода Py2, который в настоящее время использует ConfigParser .

С течением времени все больше и больше людей напрямую используют бэкпорт configparser, потому что это способ использовать новейший API-интерфейс (и функции) основной ветки разработки, оставаясь при этом на Python 2.x.

Таким образом, я не очень понимаю актуальность ваших неудачных тестов. Если вам нужен старый API, используйте старое имя модуля. Если вам нужен новый API, используйте новое имя. Больше нет смысла размещать 2.x ConfigParser там, где находится его замена Python 3.

Было бы неплохо иметь исправление для этого, так как я получил отчет об этом в Kali https://bugs.kali.org/view.php?id=3245 , а в типичной системе Kali Linux у меня есть пакеты, которым нужен как Python -future и python-configparser. За исключением того, что последний не работает для всех, кто использует его на Python 2.x из-за этой ошибки.

Подводя итог, я думаю, вам следует реализовать (1) и отказаться от тестов на configparser. (2) не является запретным, так как пакеты Debian создаются в минимальных средах, а python-configparser будет недоступен при запуске setup.py. (3) возможно, но это означает, что API python-future зависит от того, как он был установлен. Это действительно не очень хорошая идея, так как дистрибутив может быть установлен только одним способом.

Спасибо! копия @sbrun

В настоящее время, например, Fedora просто исправляет configparser, поскольку у них также есть доступный бэкпорт.

FWIW, в настоящее время я прорабатываю исправления, которые мне нужно объединить с бэкпортом, и завтра выпущу бэкпорт configparser 3.5.1. Что касается python-future, я также думаю, что он должен реализовать (1).

Спасибо за ваш вклад, все!

Я хочу удалить configparser из python-future в v0.16. У меня есть ветка: https://github.com/PythonCharmers/python-future/tree/v0.16.x.

Я пришел сюда, пытаясь понять, почему ConfigParser.read_dict перестал работать на моей машине.

Оказывается, один из пакетов, которые я использую, начал зависеть от python-future (в частности, какой-то части QGIS), а затем я столкнулся с этой проблемой, потому что версия ConfigParser в Python 2.7 не реализует полный API ConfigParser. в Python 3.x.

Я решил это, заблокировав версию пакета python-future :

sudo chmod 000 /usr/lib/python2.7/dist-packages/configparser/

Flake8 недавно добавил зависимость от бэкпорта configparser, который щедро поддерживает @ambv . У некоторых пользователей также был установлен этот модуль, который нарушал существующее, протестированное и задокументированное поведение Flake8. Для нас это проблема, и сейчас я собираюсь начать добавлять документацию к Flake8, чтобы объяснить, почему люди могут столкнуться с проблемой. Будущее будет специально упомянуто, чтобы помочь пользователям избежать этой проблемы.

@ sigmavirus24 Ян, пока вы можете обойти это, полагаясь на бэкпорт configparser и используя форму from backports import configparser . Это было специально реализовано, чтобы разблокировать подобные ситуации :(

@ambv спасибо! Я не понимал, что могу это сделать.

Я выпустил v0.16.0, которая удаляет configparser . В документации также рекомендуется использовать резервную копию Лукаша. Спасибо за отзыв, всем!

Спасибо @edschofield!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги