LoginSignup
4

More than 3 years have passed since last update.

pypiのlong_descriptionにMarkdownが使えなくてハマった話

Posted at

結論

  • 自作ライブラリ(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"は指定してあるのに、タイポかなと思っていました。本家のほうで新しい名前が追加されたので、バージョンアップをすることになり、先送りしていたこの問題にも取り組みました。

image.png

調査

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 を見て生成されているらしい、など。

原因と対策

で、ふとコードの先頭を見ると、そもそも setuptools を使っていませんでした。古い distutils を使っていたとは、完全に想定外です(自分のコードなのに)。

from distutils.core import setup

setuptoolsに差し替えればよいはず。

from setuptools import setup

無事、Markdownで説明文がレンダリングされるようになり、一安心。v0.0.2のリリースもできました。

image.png

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4