Help us understand the problem. What is going on with this article?

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

結論

  • 自作ライブラリ(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 を使っていたとは、完全に想定外です(自分のコードなのに)。

https://github.com/toshihikoyanase/mong/blob/v0.0.1/setup.py#L1

from distutils.core import setup

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

https://github.com/toshihikoyanase/mong/blob/v0.0.2/setup.py#L1

from setuptools import setup

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

image.png

toshihikoyanase
Python,自然言語処理,データ作成に興味があります。個人の考えであり、所属している組織とは関係ありません。
https://toshihikoyanase.blogspot.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした