paramiko<2
чтобы предотвратить неожиданное обновление / нарушение среды обитания людей.extras_require
не позволяет вам переопределить тот же пакет / версию, указанную в install_requires
, поэтому мы не можем сделать pip install fabric[paramiko-2]
или что-то еще.setup.py
CLI, но это также не панацея, поскольку они не работают с колесами или любым другим методом установки, отличным от sdist.fabric-paramiko2
хотя это еще один вариант.paramiko<3
в более поздних выпусках Fabric, чтобы люди могли продолжать получать исправления ошибок / безопасности / и т. Д. Из линии Paramiko 2.x.Crypto.atfork
в decorators.py
(см. # 1460) и убедиться, что не осталось другого багажа PyCrypto.Возможно, рассмотрим промежуточное состояние, когда для одного или двух выпусков 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 месяцев:
и последние 2 недели:
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
.
Самый полезный комментарий
Ворчун, это раздражает - спасибо за новости, @hostep. (Не пытаюсь шутить, но - я тоже удивлен, что MacPorts все еще используется, все, кого я знаю, перешли на Homebrew много лет назад. Хорошее напоминание, что «верх внимания»! = «Единственная игра в городе», наверное :))
Прошлой ночью я по прихоти выложил крошечный 1.12 (еще одно хорошее напоминание самому себе: прекратите использовать буквальные номера версий при обсуждении дорожной карты - просто скажите «предстоящий выпуск функции» и т. Д.) И не внес это изменение, но все же хочу сделайте это как можно скорее, так что, вероятно, вместо этого выйдет следующий второстепенный выпуск.