PyDevプロジェクトでPythonパッケージを作成する コマンドラインから呼び出すPythonパッケージの作成はPythonモジュールよりちょっと手こずる点がありました。 EclipseでPyDevパースペクティブにします。 File ー> New ...
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へのログインに失敗しています。
それぞれクリックするとそのバージョンをインストールするpipコマンドがタイトル下に表示されます。
PRE-RELEASEタグはどうしてついているのかいまのところわかりませんが、PyPIに同名のパッケージがあるかみているのかもしれません。
0 件のコメント:
コメントを投稿