Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
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
490
Call Python/Numpy Function within Metatrader 4
fxkirin
0
1.9k
Other Decks in Programming
See All in Programming
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
120
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
140
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6.2k
依存関係から依存物へ―Dependencyという言葉の歴史をひも解く
j_lee
0
120
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
200
Contextとはなにか
chiroruxx
1
330
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
560
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
110
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.3k
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
790
net-httpのHTTP/2対応について
naruse
0
500
Vite+ Unified Toolchain for the Web
naokihaba
0
320
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
320
How to Talk to Developers About Accessibility
jct
2
240
Facilitating Awesome Meetings
lara
57
7k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
630
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
160
Site-Speed That Sticks
csswizardry
13
1.2k
How to make the Groovebox
asonas
2
2.2k
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