New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Drop Python 2.6 Support #1070

Closed
reaperhulk opened this Issue Sep 21, 2017 · 14 comments

Comments

Projects
None yet
5 participants
@reaperhulk
Contributor

reaperhulk commented Sep 21, 2017

I'd like to propose that paramiko drop Python 2.6 support in its next release. One of paramiko's dependencies has already dropped Python 2.6 support (PyNaCl), pip is dropping 2.6 in its next release, cryptography has deprecated 2.6 (but has no timeline for removal due to downstream dependencies like paramiko), and download counts for paramiko's latest version show very little 2.6 usage.

In the last 2 months paramiko has had 3566507 downloads of version 2.2.1 (which was the latest version for almost all of that time). Here's what the download breakdown by Python version looks like for that:

1 | 2.7 | 2247813 |  
2 | 3.6 | 88395 |  
3 | 3.5 | 84743 |  
4 | 3.4 | 27094 |  
5 | 2.6 | 22841 |  
6 | null | 4218 |  
7 | 3.3 | 600

If we assume that all nulls (which result from downloading via either a client that doesn't report data or a pip that is too old) are also Python 2.6 that leaves us with 27059 Python 2.6 downloads. This is 0.76% of the total downloads and would appear to demonstrate that removal of 2.6 support would be very low impact. (Additionally, users on 2.6 can always pin to an older version anyway)

@bitprophet

This comment has been minimized.

Member

bitprophet commented Sep 22, 2017

Thanks for the news on this, didn't know pip was doing it in the very next release (just some amorphous mid-term.) Time flies!

See also pyinvoke/invoke#364, which was giving me some real deja vu before I noticed this was Paramiko instead 😁

Reran the numbers over there for Invoke and it's down to ~3.3% unknown-aka-probably-2.6 (from about 6% last Dec.) Still not as negligible as for Paramiko but another few percent lower and well under 5%.

(Re: paramiko) I'm still not a big fan of changing install-time deps (especially something as big as interpreter version) without an X.0 release, but I may just do what I did with the cryptography shakeup and use the upcoming work for #387 as an excuse to claim its feature release (+ dropping 2.6) is 3.0 - even if the API still ends up being backwards compatible.

@bitprophet bitprophet added this to the 3.0 milestone Sep 22, 2017

@bitprophet bitprophet added the Support label Sep 22, 2017

@hugovk

This comment has been minimized.

Contributor

hugovk commented Sep 26, 2017

Less pressing than 2.6, but for a feature release, you could also consider dropping CPython 3.3, which reaches end-of-life this week:

https://en.wikipedia.org/wiki/CPython#Version_history

@bitprophet

This comment has been minimized.

Member

bitprophet commented Sep 26, 2017

Huh, good to know, thanks @hugovk. Off the cuff thoughts:

  • My gut instinct is that 3.3 is still a lot "newer" than 2.6, despite both now being EOL'd, and so removing support for it is more of a slap in the face for anyone running it. (Heck, it's even 2 years newer than 2.7.)
    • Counterpoint: anyone on Python 3 has already had to do at least SOME nontrivial transition in the past N years and so presumably is agile enough that they could do a 3.3->3.4 jump without a huge hassle.
  • I'm personally still defaulting to Python 2.x and so my recollection of what exactly changes between 3.3 and 3.4 is hazy - what would we actually be "dropping" in terms of code changes?
  • I wonder about the current state of default-distribution Python 3 on the major distros; are any LTS releases hanging out with Python 3.3 or are they on something else?
  • Are the Pips, Sphinxes etc of the world are still supporting 3.3 or have they also all moved to 3.4?
@hugovk

This comment has been minimized.

Contributor

hugovk commented Sep 26, 2017

Dropping 3.3 brings fewer immediate code benefits than dropping 3.2 or 2.6. I guess the main thing would be removing it from CI tests and not worrying if new code runs on 3.3.

Here's the list of what's new in 3.4, like pathlib.
https://docs.python.org/3/whatsnew/3.4.html

3.3 stuff was being downloaded less than half a percent from PyPI 3.3 over a year ago. pypa/pip#3796 shows pip is deprecating 3.3 in the upcoming pip 10 release, and pip 11 won't support it.

Coverage is dropping both 2.6 and 3.3 in the next major release, but they don't yet know when that will be.

The numbers in the first comment above show 3.3 with less than 3% of 2.6's downloads, and 0.03% of 2.7's.

The oldest supported LTS is Ubuntu Trusty on 3.4.

@hugovk

This comment has been minimized.

Contributor

hugovk commented Sep 26, 2017

Sphinx has already dropped Python 2.6 and 3.3 support, in Release 1.5 (released Dec 5, 2016). They're on 1.6.4 now. http://www.sphinx-doc.org/en/stable/changes.html

@bitprophet

This comment has been minimized.

Member

bitprophet commented Sep 26, 2017

Yea, I knew Sphinx dropped 2.6 but forgot they did 3.3 at the same time. Thanks for that & the other notes! May well do that, if we're gonna rip off one bandaid it may as well be TWO bandaids...

@mimi1vx

This comment has been minimized.

mimi1vx commented Oct 5, 2017

@hugovk +1 for drop 3.3, openSUSE has 2.7 + 3.4 and 3.6 now
and probably there isn't modern distribution with older version python 3 than 3.4 :)

@clenk

This comment has been minimized.

clenk commented Oct 13, 2017

Another +1 for dropping 3.3 since cryptography dropped Py3.3 in version 2.0. This is causing errors in Travis for a project that has paramiko as a dependency.

@bitprophet

This comment has been minimized.

Member

bitprophet commented Oct 13, 2017

In terms of what it actually means to "drop" support for 2.6/3.3, as far as I can tell it's really just:

  • Updating docs and metadata, i.e., our promise/contract about what we support
  • Removing CI test matrix cells, i.e. our actual testing of that contract
  • Technically optional, but "nice": updating the code to make use of features added in Python 2.7, such as non-indexed string format specifiers, set literals, and so forth.

I'm about to land a patch that does all 3 of those things. If I've missed anything (it's...been a strange week) let me know, but I figure this is done enough to close now.

@bitprophet bitprophet closed this Oct 13, 2017

@bitprophet

This comment has been minimized.

Member

bitprophet commented Oct 13, 2017

Thanks for nothing, AJAX. Only saw @clenk's note after I hit submit. @clenk, what exact errors are we talking here? I don't see why paramiko would actually cause any explosions on 3.3 if it didn't previously, but I'm probably missing something.

@bitprophet

This comment has been minimized.

Member

bitprophet commented Oct 13, 2017

OK, those commits are now in master as of 6978c7a

@bitprophet

This comment has been minimized.

Member

bitprophet commented Oct 13, 2017

As a side note, it's very nice to have 2 fewer cells in the matrix 😆

@reaperhulk

This comment has been minimized.

Contributor

reaperhulk commented Oct 14, 2017

🎉

As an update, cryptography is dropping 2.6 support in the next release (which, based on our history, is anywhere from 4-12 weeks away).

@clenk

This comment has been minimized.

clenk commented Oct 14, 2017

@bitprophet No, it wasn't not a bug in paramiko. In the 3.3 test environment it would try to install cryptography but fail, I believe because it couldn't find a 3.3 version. Don't worry it's not an issue; we'll be dropping 3.3 support as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment