Pythonパッケージの作成からPyPI公開まで完全ガイド|pip・setup.py・twineの使い方
Pythonには、自作コードをパッケージとして作成・公開するための非常にシンプルな仕組みが用意されています。この記事では、Pythonコードをパッケージ化し、PyPI(Python Package Index)で公開するまでの一連の手順を、初心者にもわかりやすく解説します。
Pythonのパッケージ管理ツール
Pythonのパッケージ管理は、主に以下のツールによって行われます。
- pip:最も広く使われているパッケージ管理ツールです。OSへの手動インストールや更新作業をほぼ不要にし、パッケージとそのバージョン番号のリストを管理することで、別環境への正確な再現(複製)を可能にします。
- Python Package Index(PyPI):ユーザーが投稿したパッケージが集積された公式の公開リポジトリです。pipコマンドを使って「pip install パッケージ名」と入力するだけで簡単にインストールできます。
ステップ1:公開するパッケージを用意する
すでに公開したいパッケージをお持ちであれば、次のステップへ進んでください。まだない場合は、以下の手順で簡単にPythonパッケージやモジュールを作成できます。
モジュールの作成
まず、自分のコードを記述したPythonファイルを作成します。ファイル名は「myfirstPackage.py」など任意の名前で構いません。この1つのファイルが「モジュール」であり、importして自由に利用できます。
パッケージ化する
モジュールをパッケージにするのはとても簡単です。空の__init__.pyファイルを同じディレクトリに追加するだけです。
echo >> __init__.py
または、touchコマンドでも作成できます。
touch __init__.py
ディレクトリを確認すると、以下のように2つのファイルが存在しているはずです。
$dir
Volume in drive C has no label.
Volume Serial Number is 8CD6-8D39
Directory of c:\Python\Python361\firstPackage
08-04-2019 05.44 PM <DIR> .
08-04-2019 05.44 PM <DIR> ..
08-04-2019 02.25 PM 47 myFirstPackage.py
08-04-2019 05.44 PM 13 __init__.py
このように、__init__.pyとmyFirstPackage.pyの2つのファイルを含むディレクトリがあれば、それが1つのパッケージとして認識されます。
プロジェクトのパッケージ化
続いて、配布用のパッケージ構成を作成していきます。まずは公式のサンプルプロジェクトをクローンし、自分のモジュール名に合わせてフォルダ名を変更しましょう。
git clone https://github.com/pypa/sampleproject firstPackage
このテンプレートの中で特に重要なファイルは以下の通りです。
- setup.py:プロジェクトの設定情報を記述し、パッケージング用のコマンドを実行するためのファイルです。「python setup.py --help」でヘルプを確認できます。
- setup.cfg:setup.pyコマンドのオプションデフォルト値を格納するINI形式のファイルです。
- README.rst:reStructuredText形式でプロジェクトの目的などを説明するドキュメントです。
次に、作成したモジュールをこの新しいフォルダ内にコピーし、既存の「sample」モジュールを削除します。結果として、ディレクトリ構成は以下のようになります。
└───firstPackage
│ LICENSE.txt
│ MANIFEST.in
│ myFirstPackage.py
│ README.md
│ setup.cfg
│ setup.py
│ tox.ini
│ __init__.py
パッケージ名・バージョン・説明の設定
setup.pyを編集して、Pythonパッケージの基本情報を記述します。
setup.py の記述例
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="firstPackage",
version="0.0.1",
author="Rajesh Joshi",
author_email="callraj.joshi@gmail.com",
description="my First Package",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/pypa/sampleproject",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
)
ライセンスファイル(LICENSE.txt)の例
ライセンスファイルは、たとえばMITライセンスのように記述します。
MIT License
Copyright (c) [2019] [firstPackage]
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
README.md の例
## firstPackage
This is a sample package to learn the steps of creating and publishing package.
実際のパッケージビルド手順
まず、開発環境にsetuptoolsとwheelパッケージをインストールまたは最新版に更新しておきます。
>pip install wheel twine setuptools --upgrade
次に、ソースディストリビューション(sdist)を作成します。これはpipでインストールする際にビルド工程を必要とする形式のパッケージです。
>python setup.py sdist
さらに、「wheel」(ビルド済みパッケージ)も作成しておきましょう。wheelはソースディストリビューションよりも高速にインストールできる形式です。
>python setup.py bdist_wheel
これらのコマンドが正常に完了すると、パッケージがビルドされ、setup.pyと同じ階層にあるdistディレクトリ内に圧縮ファイルが生成されていることを確認できます。
パッケージのアップロードと公開
公開前に、まずローカル環境での動作確認を行いましょう。任意の場所に新しい仮想環境を作成し、有効化します。
c:\Users\rajesh>virtualenv myPackage
Using base prefix 'c:\\python\\python361'
New python executable in c:\Users\rajesh\myPackage\Scripts\python.exe
Installing setuptools, pip, wheel...done.
c:\Users\rajesh\myPackage>.\Scripts\activate
(myPackage) c:\Users\rajesh\myPackage>
先ほど作成したtar.gzファイルを新しい仮想環境にコピーし、インストールします。
>pip install firstPackage-0.0.1.tar.gz
パッケージが正しくインストールされたかどうかは、pip listコマンドで現在の環境に存在する全パッケージ一覧を表示して確認できます。
>pip list
Package Version
------------ -------
firstPackage 0.0.1
pip 19.0.3
setuptools 41.0.0
wheel 0.33.1
動作確認ができたら、いよいよパッケージをPyPIに公開して、世界中のユーザーが利用できるようにしましょう。
まず、setup.pyが存在するディレクトリに移動し、twineパッケージをインストールまたは更新します。
>pip install --upgrade twine
最後に、twineを使ってパッケージをPyPIへアップロードします。
>twine upload dist/*
Enter your username: callraj.joshi
Enter your password:
Uploading distributions to https://upload.pypi.org/legacy/
Uploading firstPackage-0.0.1-py2.py3-none-any.whl
…
ユーザー名とパスワードを入力すると、パッケージのアップロードが自動的に開始されます。完了後、PyPI上であなたのパッケージが公開され、誰でも「pip install パッケージ名」でインストールできるようになります。
補足:近年のPythonでは、setup.pyに代わってpyproject.tomlを使った設定方法が標準となりつつあります。ただし、本記事で紹介したsetup.pyベースの手順は依然として広く使われており、パッケージ公開の基本的な流れを理解するうえで非常に有用です。
-
Pythonの数学演算子徹底ガイド:基本から使い方まで
どんなアプリを開発する場合でも、コードの中で数値を扱う場面は必ずと言っていいほど登場します。レストラン向けアプリでメニューの価格を保存したり、両替アプリで異なる通貨間の換算を行ったりするのもその一例です。 Pythonを学び始めたばかりの方からよく寄せられる質問の一つが、「コード内の数値に対して数学的な操作を行うにはどうすればよいのか」というものです。このチュートリアルでは、その疑問にお答えします。Pythonの数学演算子の基礎を丁寧に解説し、読み終える頃には組み込みの数学演算子を使いこなせるようになっているはずです。 演算子とは? Pythonの数学演算子の使い方を説明する前に、まず「
-
Pythonインタープリターとは?仕組みと初心者向けオンライン環境を徹底解説
Pythonは学びやすいプログラミング言語として知られています。その理由のひとつが、自分のマシンに正しいバージョンのPythonをインストールしなくても、オンラインで利用できるPythonインタープリターが数多く存在する点です。本記事では、Pythonインタープリターの仕組みについて解説し、初心者にも使いやすい人気のオンラインインタープリターをご紹介します。 Pythonプログラムはどのように実行されるのか? PythonはJavaと同様に、純粋なインタプリタ言語ともコンパイラ言語とも分類できず、両方の性質を併せ持っています。 ここでいう「コンパイル」とは、特定のプラットフォームに依存し