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
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
160
Next.js: The final boss of Web Performance
guaca
0
250
Railsバージョンを4倍にした話
optim
0
350
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
120
AWSに止められる覚悟してますか?
morizo_1984
2
530
ActionController meets Protocol Buffers
sorah
0
520
Workers Cache を知る
syumai
0
360
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
180
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
590
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
410
Featured
See All Featured
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
480
BBQ
matthewcrist
90
10k
Google's AI Overviews - The New Search
badams
0
1.6k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Designing for Performance
lara
612
70k
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
67k
Scaling GitHub
holman
464
140k
The Cult of Friendly URLs
andyhume
79
7k
Automating Front-end Workflow
addyosmani
1369
210k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
A designer walks into a library…
pauljervisheath
211
25k
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