PytyonパッケージをTestPyPIにアップロードする

2019-06-16

KDE neonを使おう

t f B! P L
PyDevプロジェクトでPythonパッケージを作成する コマンドラインから呼び出すPythonパッケージの作成はPythonモジュールよりちょっと手こずる点がありました。 EclipseでPyDevパースペクティブにします。 File ー> New ...
この記事で作成したPyDevプロジェクトをTestPyPIにアップロードします。

setup.cfgでTestPyPIのプロジェクトページの項目を埋める



TestPyPIにパッケージをアップロードするとsetup.cfgを反映したプロジェクトページができるので、setup.cfgの内容を充実させます。
[metadata]
name = pkg1
version = attr: pkg1.__version__
url = https://github.com/p--q/PkgExample
author = P--Q
author_email = pq.blogspot@gmail.com
classifiers =
 Development Status :: 3 - Alpha 
    Environment :: Console  
    Intended Audience :: Developers  
    License :: OSI Approved :: Apache Software License
    Programming Language :: Python :: 3 :: Only  
    Programming Language :: Python :: 3.5
    Topic :: Utilities
description = A package template
long_description = file: README.md
long_description_content_type = text/markdown

[options]
package_dir=
    =src
packages=find:
python_requires = >=3.5

[options.packages.find]
where=src

[options.entry_points]
console_scripts =
 pkg1 = pkg1:main
このsetup.cfgでアップロードしました。

nameにパッケージ名を書きますが、重複するものがないか事前にPyPIやGitHub、Googleなどで事前に調べて名前を決めます。


プロジェクトページのタイトルにはnameの値と最新のversionの値が表示されます。

TestPyPIからのインストールコマンドの下には、descriptionの値が表示されます。


descriptionの値は検索結果一覧にも表示されます。

urlの値はHomepageのリンクに使われます。


Licenseはclassifiersで設定したいものが引用されます。

Authorにはauthor_emailのリンクをつけてauthorの値が使われます。

Requiresにはpython_requiresの値が使われます。

classifiersはClassifiers · PyPIから選択してコピペします。

Classifiersの項目のリンクをクリックすると同じ値のパッケージが検索されます。

Apache License 2.0はOSIから認定されている唯一のApacheのライセンスということでLicense :: OSI Approved :: Apache Software Licenseを選択します(Apache Software License version 2 not in classifiers list · Issue #91 · pypa/pypi-legacy)。

TestPyPIにアカウントを作成する


TestPyPI – the Python Package Index · TestPyPI

ここからRegisterをクリックしてアカウントを作成します。

Nameがフルネーム、UserNameがTestPyPIのアカウント名になります。

Nameはあとから変更できますが、UserNameはあとから変更できません。

NameもUserNameもTestPyPIのプロフィールページで公開されます。

メールアドレスは公開されないようです。

TestPyPIにパッケージをアップロードする


twineのインストール


アップロードの手順に必要なツールはsetuptoolsとwheelとtwineです。

setuptoolsとwheelはPyDevでpipenvを使う-p--qでpipenvをインストールしたときに同時にインストールされているのでtwineをインストールします。

pip install --user twine

これでtwineをインストールしました。

配布パッケージの作成


配布パッケージの形式にはいくつかあります(Packaging and distributing projects — Python Packaging User Guide)。

Python2は対応しないPython3のみのビルド済み配布パッケージであるPure Python Wheelsを作成することにします。

python setup.py bdist_wheel

プロジェクトのsetup.pyファイルがあるところでこのコマンドを実行します。

実行すると*.egg-info、build、distフォルダが作成されます。

奇妙なことにpipenvの仮想環境からは.mdファイルが正しく変換されるのに、KDE neonのプリインストールのpython3コマンドから実行するとrstファイルになってしまいます。

.rstファイルになっても内容が変換されていないのでTestPyPIのプロジェクトページで正しく表示されません。
pq@pq-VirtualBox:~/eclipse-workspace/PkgExample$ pipenv shell
Launching subshell in virtual environment…
pq@pq-VirtualBox:~/eclipse-workspace/PkgExample$  . /home/pq/.local/share/virtualenvs/PkgExample-Wio1Xr3O/bin/activate
(PkgExample) pq@pq-VirtualBox:~/eclipse-workspace/PkgExample$ pip freeze
(PkgExample) pq@pq-VirtualBox:~/eclipse-workspace/PkgExample$ python setup.py bdist_wheel
running bdist_wheel
running build
running build_py
copying src/pkg1/__version__.py -> build/lib/pkg1
warning: build_py: byte-compiling is disabled, skipping.

installing to build/bdist.linux-x86_64/wheel
running install
running install_lib
creating build/bdist.linux-x86_64/wheel
creating build/bdist.linux-x86_64/wheel/pkg1
copying build/lib/pkg1/__init__.py -> build/bdist.linux-x86_64/wheel/pkg1
copying build/lib/pkg1/__main__.py -> build/bdist.linux-x86_64/wheel/pkg1
copying build/lib/pkg1/__version__.py -> build/bdist.linux-x86_64/wheel/pkg1
warning: install_lib: byte-compiling is disabled, skipping.

running install_egg_info
running egg_info
writing src/pkg1.egg-info/PKG-INFO
writing dependency_links to src/pkg1.egg-info/dependency_links.txt
writing entry points to src/pkg1.egg-info/entry_points.txt
writing top-level names to src/pkg1.egg-info/top_level.txt
reading manifest file 'src/pkg1.egg-info/SOURCES.txt'
writing manifest file 'src/pkg1.egg-info/SOURCES.txt'
Copying src/pkg1.egg-info to build/bdist.linux-x86_64/wheel/pkg1-2019.6.15.3.dev0-py3.6.egg-info
running install_scripts
adding license file "LICENSE" (matched pattern "LICEN[CS]E*")
creating build/bdist.linux-x86_64/wheel/pkg1-2019.6.15.3.dev0.dist-info/WHEEL
creating 'dist/pkg1-2019.6.15.3.dev0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
adding 'pkg1/__init__.py'
adding 'pkg1/__main__.py'
adding 'pkg1/__version__.py'
adding 'pkg1-2019.6.15.3.dev0.dist-info/LICENSE'
adding 'pkg1-2019.6.15.3.dev0.dist-info/METADATA'
adding 'pkg1-2019.6.15.3.dev0.dist-info/WHEEL'
adding 'pkg1-2019.6.15.3.dev0.dist-info/entry_points.txt'
adding 'pkg1-2019.6.15.3.dev0.dist-info/top_level.txt'
adding 'pkg1-2019.6.15.3.dev0.dist-info/RECORD'
removing build/bdist.linux-x86_64/wheel
byte-compiling is disabled, skipping.という警告が2回でてきますが、エラーではないので問題ないようです。

python3 setup.py bdist_wheelで実行すると警告はでてこないのですが、先に述べたようにmdファイルが正しく変換されません。

ビルドしたプロジェクトフォルダにdistフォルダが作成されwhlファイルが作られているはずです。


ファイル名にパッケージのバージョン番号が使われているので、同じバージョンのパッケージをビルドするとwhlファイルが上書きされます。

ただしTestPyPIは同じバージョンのアップロードは受け付けません。

TestPyPIにアップロードする


twine upload --repository-url https://test.pypi.org/legacy/ dist/*

これでdistフォルダにあるすべてのwhlファイルがアップロードされます。

ただしすでにアップロードした同じバージョンのwhlファイルはエラーになります。
pq@pq-VirtualBox:~/eclipse-workspace/PkgExample$ twine upload --repository-url https://test.pypi.org/legacy/ dist/*
Enter your username: pq.blogspot
Enter your password: 
Uploading distributions to https://test.pypi.org/legacy/
Uploading pkg1-2019.6.15.2.dev0-py3-none-any.whl
100%|███████████████████████████████████████████████████████████████████████████████████████| 7.11k/7.11k [00:00<00:00, 63.2kB/s]
HTTPError: 403 Client Error: Invalid or non-existent authentication information. for url: https://test.pypi.org/legacy/

Uploadingが100%になってもこれがでてきたときはTestPYPIへのログインに失敗しています。


TestPyPIのプロジェクトページのRelease historyからアップロード履歴が見れます。

それぞれクリックするとそのバージョンをインストールするpipコマンドがタイトル下に表示されます。

PRE-RELEASEタグはどうしてついているのかいまのところわかりませんが、PyPIに同名のパッケージがあるかみているのかもしれません。

ブログ検索 by Blogger

Translate

最近のコメント

Created by Calendar Gadget

QooQ