Fabric: Если Paramiko 2.0.x определенно станет стабильным, подумайте о том, чтобы установить контакт с требованием Paramiko.

Созданный на 30 апр. 2016  ·  19Комментарии  ·  Источник: fabric/fabric

  • Некоторое время назад мы выпустили версии 1.10.3 и 1.11.1 с явным закреплением paramiko<2 чтобы предотвратить неожиданное обновление / нарушение среды обитания людей.
  • Paramiko 2.0 уже вышел, но в нем свежая версия, предположительно, в нем могут быть какие-то ошибки, которые нужно исправить.
  • Было бы _приятно_ разрешить людям обновляться до Paramiko 2.0 под Fabric 1, если они явно этого хотят - однако я не вижу способа сделать это в setuptools / pip.

    • например, функциональность extras_require не позволяет вам переопределить тот же пакет / версию, указанную в install_requires , поэтому мы не можем сделать pip install fabric[paramiko-2] или что-то еще.

    • Надеюсь, мы можем сделать еще кое-что, чего мне не хватает, например, параметры setup.py CLI, но это также не панацея, поскольку они не работают с колесами или любым другим методом установки, отличным от sdist.

    • Я также хотел бы избежать необходимости делать какую-то ужасную вторую запись PyPI / setup.py, например fabric-paramiko2 хотя это еще один вариант.

  • Учитывая, что Paramiko 2 является API-совместимым с Paramiko 1, мы _могаем_ просто поднять номер версии до paramiko<3 в более поздних выпусках Fabric, чтобы люди могли продолжать получать исправления ошибок / безопасности / и т. Д. Из линии Paramiko 2.x.

    • Если мы это сделаем, необходимо удалить вызов Crypto.atfork в decorators.py (см. # 1460) и убедиться, что не осталось другого багажа PyCrypto.

    • Это всегда будет иметь шанс сломаться для людей, которые не могут получить статическое колесо «все в одном» Cryptography.io; они обновят Fabric, а затем он взорвется, если им не хватает libffi-dev или openssl-dev. Поэтому было бы вполне разумно никогда не откручивать эту булавку, вместо этого попросив людей использовать Fabric 2, когда она будет снята.

Packaging Support

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

Ворчун, это раздражает - спасибо за новости, @hostep. (Не пытаюсь шутить, но - я тоже удивлен, что MacPorts все еще используется, все, кого я знаю, перешли на Homebrew много лет назад. Хорошее напоминание, что «верх внимания»! = «Единственная игра в городе», наверное :))

Прошлой ночью я по прихоти выложил крошечный 1.12 (еще одно хорошее напоминание самому себе: прекратите использовать буквальные номера версий при обсуждении дорожной карты - просто скажите «предстоящий выпуск функции» и т. Д.) И не внес это изменение, но все же хочу сделайте это как можно скорее, так что, вероятно, вместо этого выйдет следующий второстепенный выпуск.

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

Возможно, рассмотрим промежуточное состояние, когда для одного или двух выпусков fabric setup.py разрешает как paramiko>=2 и paramiko<2 , и люди получат cryptography по умолчанию, но может принудительно использовать старую версию PyCrypto если она им нужна. Как только это немного выгорит, вы можете переместить setup.py чтобы потребовать paramiko>=2 .

Не уверен, что я когда-нибудь заставлю Fabric 1.x требовать paramiko> = 2, планируя сохранить это для Fabric 2.x. Я полагаю, зависит от восприятия Fabric 2.x, когда он будет выпущен.

Вы правы, что возвращение к незакрепленному «мне все равно, paramiko 1 или 2 в порядке» все еще разрешимо, если позволить людям вручную понизить свой Paramiko. закрепление было в основном попыткой предотвратить поток отчетов «оноз и сломал мою сборку». У нас есть кое-что, но не тонна, было ли это из-за моей булавки, никто не догадывается.

@bitprophet FWIW, у меня есть данные! За последние 2 недели (то есть за несколько дней до выпуска paramiko 2.0) вот самые загружаемые версии Paramiko с PyPI:

| Версия | Загрузки |
| --- | --- |
| 1.16.0 | 411903 |
| 2.0.0 | 308131 |
| 1.17.0 | 77360 |
| 1.15.2 | 47677 |
| 1.15.1 | 23893 |

Для меня это очень большое количество установок 2.0 указывает на то, что это, вероятно, безопасно, и поэтому удаление привязки <2 не нужно, для большинства людей это будет работать нормально (или будет легко исправлено), а для тех, кто может 'не просто выполнить pip install paramiko<2 до того, как pip install fabric исправит это.

Можно ли было бы хотя бы использовать маркер среды, чтобы указать фабрике использовать paramiko> 2 для PyPy по крайней мере, где текущее статус-кво таково, что фабрика все равно не установится?

@alex запоздало, вы имели в виду "удаление границы <2 безопасно"? (вместо "ненужного"): D

@Julian Я полагаю, вы имеете в виду еще несколько строк «изменить install_requires на основе текущего интерпретатора»? Не против того, чтобы навскидку. (Хотя IIRC такие хаки перестают работать с колесами, поэтому мы начинаем от них уклоняться ...?)

Эээ, да, я имел ввиду, что это безопасно.

@bitprophet для колес вы делаете то же самое, только в extras_require с маркером окружения.

Обычно вы трете живот @dstufft , и выскакивает джинн.

(Более серьезный пример: https://github.com/Julian/jsonschema/blob/master/setup.py#L25, но вместо этого вы заменяете python_version на python_interpreter для отправки).

Я постараюсь поместить это в пиар, чтобы вы могли увидеть, как это выглядит, если вы не собираетесь делать это в любом случае?

Отлично, я лишь смутно помню, как недавно узнал об этом. Ясно потом забыл. Я определенно согласен с этим, если это поможет некоторым людям, но не навредит большинству. PR будет оценен.

Re: внешняя проблема, я думаю, что на данный момент я не могу поставить штифт на <3 в Fabric 1.12+ (наряду с другими очистками Crypto, упомянутыми ранее, хотя они должны были стать условными, если я не хотел do paramiko>=2,<3 , что я не поддерживаю. Увидим, насколько уродливыми станут вещи, когда я наткнусь на это и попробую убедиться, что одна и та же ветвь Fabric проходит тесты в двух отдельных venv, один с Crypto и Paramiko 1, другие без Крипто и Парамико 2)

Привет, народ

Небольшое дополнение к этому обсуждению:
Мы используем Macports для установки порта Fabric, который зависит от порта Paramiko на наших рабочих станциях macOS.
Но недавно Macports решил обновить Paramiko с версии 1.16.0 до 2.0.1, и теперь, когда мы запускаем Fabric, он больше не работает:

➜ fab deploy
Traceback (most recent call last):
  File "/opt/local/bin/fab", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2927, in <module>
    <strong i="13">@_call_aside</strong>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2913, in _call_aside
    f(*args, **kwargs)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2940, in _initialize_master_working_set
    working_set = WorkingSet._build_master()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pkg_resources/__init__.py", line 637, in _build_master
    return cls._build_from_requirements(__requires__)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pkg_resources/__init__.py", line 650, in _build_from_requirements
    dists = ws.resolve(reqs, Environment())
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pkg_resources/__init__.py", line 829, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'paramiko<2.0,>=1.10' distribution was not found and is required by Fabric

Я обошел это, понизив Paramiko до версии 1.16.0 с помощью Macports, что было немного сложно сделать вручную, но в конце концов он снова заработал.

Я думаю, что это ошибка Macports, им следовало дождаться обновления Paramiko в своем дереве, пока Fabric не станет совместимым.

Но в любом случае было бы здорово, если бы новая версия Fabric могла быть выпущена с поддержкой Paramiko> 2.0, чтобы мы могли снова заставить все работать, используя Macports с последними версиями всех портов.

Ворчун, это раздражает - спасибо за новости, @hostep. (Не пытаюсь шутить, но - я тоже удивлен, что MacPorts все еще используется, все, кого я знаю, перешли на Homebrew много лет назад. Хорошее напоминание, что «верх внимания»! = «Единственная игра в городе», наверное :))

Прошлой ночью я по прихоти выложил крошечный 1.12 (еще одно хорошее напоминание самому себе: прекратите использовать буквальные номера версий при обсуждении дорожной карты - просто скажите «предстоящий выпуск функции» и т. Д.) И не внес это изменение, но все же хочу сделайте это как можно скорее, так что, вероятно, вместо этого выйдет следующий второстепенный выпуск.

FWIW, мы (FreeBSD) столкнулись с той же проблемой, и нам пришлось создать порт paramiko1 и пакет для py-fabric, чтобы зависеть от него. Смотрите также:

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=213893
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=214379

TL; DR: зависимости <= и == очень болезненны / раздражают и создают больше проблем, чем они призваны решить.

Для нижестоящих пользователей и упаковщиков / носильщиков гораздо меньше проблем, когда восходящие потоки просто активно тестируют последние версии своих зависимостей (в процессе разработки, перед выпуском релизов - лучшее время для этого) и не предписывают и не ограничивают управление версиями зависимостей, если только есть версии, которые явно нарушают совместимость.

Даже в этом случае ограничение носит временный характер, и только в том случае, если выпуск сделан, когда он не работает, и только в то время, когда автор (-ы) зависимостей уведомлен (-ы) и до тех пор, пока не будут внесены исправления.

Преимущество этого метода заключается в том, что он учит апстримов (и апстримов) тому, что решения, которые они принимают, на самом деле влияют на их пользователей на практике (а не только в теории), и с этим знанием, мы надеемся, сводит к минимуму вероятность того, что это повторится снова в будущем.

Чтобы добавить немного дополнительной информации о проблеме Macports, она, кажется, исправлена, потому что они добавили патч при установке, который изменяет требования для Paramiko с <2.0 на <3.0
Теперь мы запускаем Fabric v1.12.0 и Paramiko v2.0.2 на наших рабочих станциях macOS, и у нас нет проблем с этим.

@hostep Спасибо, что подчеркнули это

@hostep Действительно, бывают случаи, когда я переопределял спецификации *_requires (от <= / == до >= или '' ) во FreeBSD портов, если набор тестов прошел с более поздней версией зависимости. Однако это зависит от великолепных тестов, поэтому может быть рискованно, и хотя мы находимся ниже по течению от Fabric, мы также не любим нарушать наши пользовательские (нижестоящие) среды :)

Больше обновлений номеров ... Обзор за последние 6 месяцев:

screen shot 2016-12-05 at 6 27 27 pm

и последние 2 недели:

screen shot 2016-12-05 at 6 35 09 pm

Paramiko 2.0.x теперь легко половина всех скачиваний. И мне интересно, сколько из остальных 50% связано с тем, что этот тикет не был объединен :) Скоро узнаю!

Думаю, я выполню это и выложу как Fab 1.13.0.

Вернулся к тому, что мы с давно, но эта магия extras_require кажется необходимой только в том случае, если я хотел ограничить изменение PyPy; на данный момент я просто выполняю оптовую продажу "разрешить Paramiko <3" ...

Есть PyPI

Ага, конечно, я забыл родной билет, №1462! 1.13.1 в пути ... РЕДАКТИРОВАТЬ: и, слито / выпущено.

Ура!

9 декабря 2016 г. в 20:14 "Джефф Форсьер" [email protected] написал:

Ага, конечно, я забыл родной билет, №1462
https://github.com/fabric/fabric/pull/1462 ! 1.13.1 в пути ...

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/fabric/fabric/issues/1461#issuecomment-266111875 или отключить звук
нить
https://github.com/notifications/unsubscribe-auth/AAUIXlbJBlS0po_zKgQsUp7-y7I7WgbTks5rGbajgaJpZM4ITeNm
.

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

Смежные вопросы

jamesob picture jamesob  ·  3Комментарии

TimotheeJeannin picture TimotheeJeannin  ·  3Комментарии

supriyopaul picture supriyopaul  ·  4Комментарии

peteruhnak picture peteruhnak  ·  4Комментарии

omzev picture omzev  ·  6Комментарии