結論
- 自作ライブラリ(mong) を pypi に登録しようとしたらパッケージ説明(README.md)のフォーマットエラーで怒られた
-
long_description_content_type
は指定してあるのにreStructuredTextだと認識されている -
setup.py
ではdistutils.core.setup
ではなくsetuptools.setup
を使えば解決
気づけば解決は一瞬でした。あまりsetup.pyを一から作る機会はないので、今後のために記録しておきます。(3日後の自分は他人)
経緯
mongのpypiの説明文が崩れているのがずっと気になっていました。Markdownだと認識されておらず、 setup()
の引数にlong_description_content_type="text/markdown"
は指定してあるのに、タイポかなと思っていました。本家のほうで新しい名前が追加されたので、バージョンアップをすることになり、先送りしていたこの問題にも取り組みました。
調査
twine check
を使おう
はじめは test.pypi でテストをしていましたが、途中で twine check
を使えば手元で検証できることに気づきました。これで検証のサイクルが高速化できました。
twineでのチェック結果は下記のとおりで、やはり long_description_content_type
が指定されていないと出ます
% twine check dist/mong-0.0.1.tar.gz
Checking dist/mong-0.0.1.tar.gz: FAILED
`long_description` has syntax errors in markup and would not be rendered on PyPI.
line 13: Warning: Inline literal start-string without end-string.
warning: `long_description_content_type` missing. defaulting to `text/x-rst`.
調査項目
下記の項目を順次調べていきました。結局全部関係ありませんでしたが、 PyPI
やパッケージの理解が深まりました。 説明文は mong-0.0.1/PKG-INFO
を見て生成されているらしい、など。
- typo: Python公式ドキュメントの例をコピペしてもだめだったので違いそう
- 他の項目のフォーマット違反: 入力項目を最小にしても、なお起こる
-
setuptoolsのバージョンが古い: setuptoolsはv38.6.0からMarkdownに対応とのことだが、
45.2.0
を使っている
原因と対策
で、ふとコードの先頭を見ると、そもそも setuptools
を使っていませんでした。古い distutils
を使っていたとは、完全に想定外です(自分のコードなのに)。
from distutils.core import setup
setuptools
に差し替えればよいはず。
from setuptools import setup
無事、Markdownで説明文がレンダリングされるようになり、一安心。v0.0.2のリリースもできました。