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
daniellindsley
April 08, 2013
Technology
160
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
460
API Design Tips
daniellindsley
14
4k
Building A Python-based Search Engine
daniellindsley
20
2.6k
RESTful APIs with Tastypie
daniellindsley
19
2.9k
Django Boston - 2011
daniellindsley
4
290
Getting The Most Out Of Haystack
daniellindsley
5
260
Other Decks in Technology
See All in Technology
Refining Active Record
shugo
0
190
【データ横丁主催】AI エージェント時代のTranslytical Data Platform
shisyu_gaku
0
220
Browser Spec: Testing Hotwire with Ruby
takahashim
1
160
dbt Semantic Layerで進めるenechainのデータ民主化
akizhou
1
210
僕のハーネスを紹介します
watany
5
1.4k
AIにシークレットを見せない、WSL2で安全な開発環境
yazm
0
340
野蛮なアジャイル [サイボウズ発!]組織の常識を覆した反骨のスクラム実践記 / Barbaric Agile - Enterprise Agile Study Group
ama_ch
0
120
Let's Change Our World—Again
snoozer05
PRO
4
320
データエンジニアの次の戦場は "プロセスエンジニアリング"
sansantech
PRO
1
150
CloudWatch Logsのコスト最適化:どこまでAIに任せてどこから人間が承認すべきか
yama3133
0
150
M5Stackで作る BLEマウス GPSログの世界
tomokusaba
PRO
0
460
Conditional PED-ANOVA: Hyperparameter Importance in Hierarchical & Dynamic Search Spaces
pfn
PRO
0
150
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
371
20k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.5k
4 Signs Your Business is Dying
shpigford
187
23k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
480
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
YesSQL, Process and Tooling at Scale
rocio
174
15k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Code Reviewing Like a Champion
maltzj
529
40k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
Code Review Best Practice
trishagee
74
20k
Odyssey Design
rkendrick25
PRO
2
880
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