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
Poetry, the Package Manager
Search
fx-kirin
January 07, 2020
Programming
590
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Poetry, the Package Manager
fx-kirin
January 07, 2020
More Decks by fx-kirin
See All by fx-kirin
Jupyter add Timestamp to Default Name
fxkirin
0
500
Call Python/Numpy Function within Metatrader 4
fxkirin
0
1.9k
Other Decks in Programming
See All in Programming
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
1
150
XHTMLが残したもの
yosuke_furukawa
PRO
2
800
Java 27新機能 / Java 27 new features
kishida
2
140
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
120
FreeBSDでZabbixを動かす.pdf
kenkino
0
280
Jetpack Compose メカニズム
skydoves
0
420
自分的「カンファレンスの楽しみ方」
syumai
0
200
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
0
160
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
240
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
110
Intent as Code
shoppingjaws
6
1k
Go のフラットな パッケージに 「ファイル単位の private」を 〜Linter “declscope” を作った話〜
mpyw
0
320
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
250
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
380
Building Applications with DynamoDB
mza
96
7.2k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
240
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
230
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
From π to Pie charts
rasagy
1
370
Transcript
Osaka Python User Group #2 2020-01-17 1/28
About me Name : Yoshiaki Ono Job : Self-employed Python
Programmer Twitter : fx_kirin 2/28
What is OPUG Share programming knowledge and help each other.
3/28
Poetry The Package Manager Yoshiaki Ono 4/28
Agenda Poetry hands on Introduction of python package management Packaging
history Manual way of packaging Poetry is great 5/28
Before the talk Just give it a try. 6/28
Install Poetry Linux / Mac Users Windows Users Anaconda(Not recommended)
curl -sSL | python https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py (Invoke-WebRequest -Uri -UseBasicParsing).Content | python https://raw.githubusercontent.com/python-poetry/poetry/master/get- poetry.py conda install -c conda-forge poetry 7/28
Create new package $ poetry new my-package Created package my_package
in my-package my-package ├── my_package │ └── __init__.py ├── pyproject.toml ├── README.rst └── tests ├── __init__.py └── test_my_package.py 8/28
Add dependencies $ cd my-package $ poetry add requests Using
version ^2.22.0 for requests Updating dependencies Resolving dependencies... (2.8s) Writing lock file Package operations: 5 installs, 0 updates, 0 removals - Installing certifi (2019.11.28) - Installing chardet (3.0.4) - Installing idna (2.8) - Installing urllib3 (1.25.7) - Installing requests (2.22.0) 9/28
Implement the module ./my_package/__init__.py 01 __version__ = "0.1.0" 02 03
import requests 04 05 06 def foo(): 07 requests.get("https://www.google.com") 08 print("Log from my_package") 10/28
Build the package $ poetry build Building my-package (0.1.0) -
Building sdist - Built my-package-0.1.0.tar.gz - Building wheel - Built my_package-0.1.0-py3-none-any.whl 11/28
Install to global python $ cd dist $ pip install
my_package-0.1.0-py3-none-any.whl Requirement already satisfied: my-package==0.1.0 from file:///tmp/my-package/dist/my_pac Requirement already satisfied: logzero<2.0.0,>=1.5.0 in /home/zenbook/.pyenv/versions/mi Requirement already satisfied: requests<3.0.0,>=2.22.0 in /home/zenbook/.pyenv/versions/ Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /home/zenbook/.pyenv/versions/mi Requirement already satisfied: idna<2.9,>=2.5 in /home/zenbook/.pyenv/versions/miniconda Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /home/zenbook/ Requirement already satisfied: certifi>=2017.4.17 in /home/zenbook/.pyenv/versions/minic 12/28
Test the package $ ipython Python 3.6.7 |Anaconda, Inc.| (default,
Oct 23 2018, 19:16:44) Type 'copyright', 'credits' or 'license' for more information IPython 7.4.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: import my_package In [2]: my_package.foo() Log from my_package 13/28
Upload to PyPI $ poetry publish Publishing my-package (0.1.0) to
PyPI Username: test Password: - Uploading my-package-0.1.0.tar.gz 100% ... 14/28
Super Easy! 15/28
Packaging 16/28
What it looks like in Python Module: a file containing
Python code Package: a directory of Python module Distribution: an archived module/package (tar, whl, zip) package_name ├── dist │ └── package_name-0.1.0.tar.gz ├── package_name │ └── __init__.py └── setup.py 17/28
Python's packaging history 2000: Distutils 2003: PyPI 2004: Setuptools 2007:
Virtualenv 2008: Pip 2011: Python Packaging Authority(PyPA) 2013: Wheel 2016: Pyproject.toml 2017: Pipenv 2018: Poetry 18/28
Python Packaging was so complicated. 19/28
PyPA packaging tutorial https://packaging.python.org/ 20/28
1. Manually create a project structure packaging_tutorial/ example_pkg/ __init__.py setup.py
LICENSE README.md 21/28
2. Manually write setup.py import setuptools with open("README.md", "r") as
fh: long_description = fh.read() setuptools.setup( name="example-pkg-your-username", version="0.0.1", author="Example Author", author_email="
[email protected]
", description="A small example package", long_description=long_description, ..., python_requires='>=3.6', ) 22/28
3. Build distribution with setuptools $ pip install setuptools wheel
$ python3 setup.py sdist bdist_wheel $ ls dist dist/ example_pkg-0.0.1-py3-none-any.whl example_pkg-0.0.1.tar.gz 23/28
4. Use tool called twine to upload $ pip install
twine $ python -m twine upload dist/* Uploading distributions... Enter your username: [your username] Enter your password: ... uploaded 24/28
Poetry does all of them. 25/28
setup.py generated by poetry 01 # -*- coding: utf-8 -*-
02 from setuptools import setup 03 04 packages = \ 05 ['my_package'] 06 07 package_data = \ 08 {'': ['*']} 09 10 install_requires = \ 11 ['requests>=2.22.0,<3.0.0'] 12 13 setup_kwargs = { 14 'name': 'my-package', 15 'version': '0.1.0', 16 'description': '', 17 'long_description': None, 26/28
What you can't do with Poetry C-Extension libraries. 27/28
Let's start using Poetry and make your life easier! 28/28