Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
The March To 3
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
daniellindsley
April 08, 2013
Technology
150
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The March To 3
The How's and Why's of porting to Python 3.
daniellindsley
April 08, 2013
More Decks by daniellindsley
See All by daniellindsley
The Unenviable Tutorial
daniellindsley
3
180
How (Not) To Build An OSS Community
daniellindsley
1
270
Avoiding The Search Hall Of Shame
daniellindsley
3
450
API Design Tips
daniellindsley
14
3.9k
Building A Python-based Search Engine
daniellindsley
20
2.6k
RESTful APIs with Tastypie
daniellindsley
19
2.9k
Django Boston - 2011
daniellindsley
4
280
Getting The Most Out Of Haystack
daniellindsley
5
250
Other Decks in Technology
See All in Technology
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
20
10k
アリアドネの糸と、20年ごとの建て替え ── 長尾真『電子図書館』を、伊勢で読み直す / Rereading Makoto Nagao’s "Electronic Library" in Ise
ykiyota
0
160
家のリアーキテクト・リファクタリング
suguruooki
0
140
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
660
薬剤師(ドメインエキスパート)と一緒に育てる薬局向けAIアシスタント
kakehashi
PRO
2
160
synctest時代のhttptest Go 1.27で変わるHTTPサーバテストの裏側 / go conference2026 synctest and httptest
budougumi0617
1
2.8k
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
820
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
150
登壇の自信を奪う3匹のオバケ / 3 Ghosts That Rob You of Your Confidence in Public Speaking
pauli
5
450
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
640
NW運用でNWトポロジ可視化ツールに期待すること/shumoku-meetup1
corestate55
2
120
コスト最適化の「めんどくさい」を AWS FinOps Agent でチョット楽にする
classmethod_kaz
0
330
Featured
See All Featured
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
450
Writing Fast Ruby
sferik
630
63k
Thoughts on Productivity
jonyablonski
76
5.4k
Prompt Engineering for Job Search
mfonobong
0
450
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.7k
A Soul's Torment
seathinner
7
3.6k
Utilizing Notion as your number one productivity tool
mfonobong
4
590
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
980
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Transcript
The March To3
Who? • Daniel Lindsley • Pythonista since 2003 • Djangonaut
since 2006 • Author of Tastypie / Haystack / itty / others
None
Your language is...
Your language is... DEAD
Your language is... DEAD ...for small values of “dead”.
None
None
⦸
None
None
⦸
None
is dead;
is dead; Long live !
None
Why port to Python 3?
Active Development Python 2.7.x will only get security updates. No
Python 2.8 ever.
As Fast As 2.7 With 3.3 & it’ll only get
better.
Cleaned Up Syntax We’ll get to some of these in
a bit.
Better String Handling Unicode everywhere.
Stable
None
Changes from 2 to 3 •Removals • Backticks, classic classes
• <>, apply, reduce, dict.has_key • Others
Changes from 2 to 3 •Changed • print is now
print() • next() is now __next__() • Better raise syntax • Metaclasses
Changes from 2 to 3 •Changed (cont.) • Faster Decimal
implementation • Reorganized & spruced up stdlib • Careful with I/O!
Changes from 2 to 3 •New! • Built-in OrderedDict •
String formatting • dict / set comprehensions • Generator delegation via yield from
Changes from 2 to 3 •New! (cont.) • Built-in virtualenv
support! • unittest2 by default! • World domination with importlib
None
“What versions should I support?”
“What versions should I support?” Simple answer: Python 2.6+ &
Python 3.3+
None
“So how do I port?”
IT DEPENDS!
Decide between... • A One-time port • A Combined 2
& 3 codebase ...or...
None
The One-time port
The One-time port • Ensure you have good test coverage
• Use 2to3 to convert the codebase • Run tests & fix until it passes
None
The Combined 2 & 3 codebase
The Combined 2 & 3 codebase • First, you need
a venv: •virtualenv -p python3 env3 •. env3/bin/activate
The Combined 2 & 3 codebase • Ensure you have
good test coverage • Require six as a dependency • Use six to patch over the differences • Run tests in Py3 & fix until it passes... • ...then run tests in Py2 & fix until it passes!
None
Using six in practice
Demo time.
None
More information • http://pyvideo.org/video/1730/python-33- trust-me-its-better-than-27 • http://pyvideo.org/video/1787/porting- django-apps-to-python-3 • http://pyvideo.org/video/1704/why-you-
should-use-python-3-for-text-processing • http://pythonhosted.org/six/
More information • http://www.dabeaz.com/python3io/ MasteringIO.pdf
Thanks! @daniellindsley https://github.com/toastdriven