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
Beyond the pip
Search
Daniela
February 23, 2019
Technology
78
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Beyond the pip
Making sense of the dependency jungle
Daniela
February 23, 2019
More Decks by Daniela
See All by Daniela
System for Continuous Health Monitoring
danielacraciun
0
63
ELK Stack
danielacraciun
0
110
DNS Tunneling
danielacraciun
0
110
Django ORM vs SqlAlchemy (an comparison)
danielacraciun
1
1.4k
Other Decks in Technology
See All in Technology
Apache Iceberg が拓く AI 時代のオープンレイクハウス
tomtanaka
0
210
覗いてみよう 関数型ビジュアル言語×2Dグラフィックスの世界
yohyamasaki
0
160
大阪オフィスに Unitree Go2 がやってきたので Physical AI やってみた
dafujii
0
240
AI駆動開発で仕様はどこまで書くべきか? ― 人とAIの責務境界から考える開発プロセスの実践
takahiromatsui
1
300
AI 時代の Azure エンジニアリング ~ 私たちは何を磨き、何を任せるのか ~
chack411
1
360
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
16
120k
オブザーバビリティを高める AI エージェント体験を考える / Designing AI Agent Experiences That Enhance Observability
aoto
PRO
2
210
Incremental HTTP
kazuho
5
2k
行動するAIのためのオントロジー | DevRev — Encraft #26.pdf
dvrv_tknrszk
2
670
VS Code × GitHub Copilot での Fabric 開発
ryomaru0825
1
220
メルカリにおけるAI時代の高速プロトタイピング基盤「Arca」
ryotarai
18
14k
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
710
Featured
See All Featured
エンジニアに許された特別な時間の終わり
watany
109
250k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
30 Presentation Tips
portentint
PRO
1
410
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Mobile First: as difficult as doing things right
swwweet
225
10k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Making the Leap to Tech Lead
cromwellryan
135
10k
Embracing the Ebb and Flow
colly
88
5.2k
A Soul's Torment
seathinner
8
3.7k
Optimizing for Happiness
mojombo
378
71k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
550
Transcript
Beyond Beyond the pip the pip
Disclaimer: this is not about Disclaimer: this is not about
pip (in particular). pip (in particular).
None
[Introduction slide]
None
It's the year 2019 It's the year 2019 are we
supposed to write our are we supposed to write our own code now?? own code now??
NOPE. NOPE. BUT DOUBT. EVERYTHING. BUT DOUBT. EVERYTHING.
None
The good The good
The good The good Multitude of libraries
The good The good Multitude of libraries Ease of use
The good The good Multitude of libraries Ease of use
Open source software
The bad The bad
The bad The bad Poorly written & documented
The bad The bad Poorly written & documented Not optimized
The bad The bad Poorly written & documented Not optimized
Might go missing
The ugly The ugly
The ugly The ugly Security issues
The ugly The ugly Security issues Malicious activity (typosquatting happening)
The ugly The ugly Security issues Malicious activity (typosquatting happening)
Dependency hell
Review time! Review time!
Is the library... Is the library...
Is the library... Is the library... mature? mature?
Is the library... Is the library... mature? mature? used in
commercial products? used in commercial products?
Is the library... Is the library... mature? mature? used in
commercial products? used in commercial products? backed up by other organizations? backed up by other organizations?
Is the library... Is the library...
Is the library... Is the library... used all through your
project? used all through your project?
Is the library... Is the library... used all through your
project? used all through your project? heavily relying on other libraries? heavily relying on other libraries?
Improve the library Improve the library Contribute to open source!
Contribute to open source!
Use a pattern... Use a pattern... wrap it up! (the
code, that is) wrap it up! (the code, that is) from external_dependency import something class SomeExternalDependencyClient: def __init__(self, credentials, name): self.client = something.Client(credentials, name) def get_items(self, ids): self.client.get(ids) def send_items(self, item_list): self.client.batch_insert(item_list)
The standard library is The standard library is awesome! awesome!
Good resources Good resources Module of the Week by Doug Hellmann PyTricks by Dan Bader
You have You have ... ... magic methods magic methods
class Hasher(object): def __init__(self, algorithm): self.algorithm = algorithm def __call__(self, file): hash = self.algorithm() with open(file, 'rb') as f: for chunk in iter(lambda: f.read(4096), ''): hash.update(chunk) return hash.hexdigest() md5 = Hasher(hashlib.md5) sha1 = Hasher(hashlib.sha1) md5(somefile)
Awesome Awesome decorators decorators from functools import wraps def retry(count=5,
exc_type=Exception): def decorator(func): @wraps(func) def result(*args, **kwargs): last_exc = None for _ in range(count): try: return func(*args, **kwargs) except exc_type as e: last_exc = e raise last_exc return result return decorator @retry def might_fail(): # some code here pass
class Cache: def __init__(self): self.memo = {} def store(self, fn):
def wrapper(*args): if args not in self.memo: self.memo[args] = fn(*args) return self.memo[args] return wrapper def clear(self): self.memo.clear() cache = Cache() @cache.store def somefct(): return expensive_call() cache.clear()
Powerful Powerful containers containers >>> from collections import Counter >>>
colors = ['blue', 'red', 'blue', 'yellow', 'blue', 'red'] >>> counter = Counter(colors) Counter({'blue': 3, 'red': 2, 'yellow': 1}) >>> counter.most_common()[0][0] 'blue' >>> Point = collections.namedtuple('Point', 'x y') >>> p = Point(1, y=2) Point(x=1, y=2) >>> p.x 1 >>> getattr(p, 'y') 2 >>> p._fields ('x', 'y')
and so many MORE! and so many MORE! utilities utilities
powerful powerful speci c operations speci c operations dev tools: dev tools: , , , , date & time handling date & time handling regex regex os os pydoc pydoc unittest unittest pdb pdb
I still think libraries are cool, I still think libraries
are cool, okay? okay?
This is it. Thank you!