以下を使用してパッケージをPyPiにアップロードしました。
python setup.py register -r pypi
python setup.py sdist upload -r pypi
私は説明を変更しようとしています、私は書きました(次のコードの書式を編集しないでください、私は私の問題を実証するために意図的に作成しました):
**my plugin**
This plugin enables you to ... For example:
```python
@attr(section='MySection', id=1)
def test_function(self):
"""
Bla bla bla
"""
pass
```
ただし、テキストはそのまま表示されます、マークダウンフォーマットなし。私は何を間違えていますか?
2018年3月16日の時点で、PyPI.org別名Warehouse(最終的に)は、長い説明でマークダウンをサポートしています。 Warehouseは、2018年4月に古いレガシーPyPI実装を置き換えました。
必要がある:
setuptools
がバージョン38.6.0以降にアップグレードされていることを確認してください
twine
がバージョン1.11.0以降にアップグレードされていることを確認してください
wheel
がバージョン0.31.0以降にアップグレードされていることを確認してください
_long_description_content_type
_という名前の新しいフィールドをsetup()
呼び出しに追加し、_'text/markdown'
_に設定します。
_setup(
long_description="""# Markdown supported!\n\n* Cheer\n* Celebrate\n""",
long_description_content_type='text/markdown',
# ....
)
_
PEP 566- Python Software Packages 2.1 のメタデータを参照してください。
twine
を使用して、ディストリビューションをPyPIにアップロードします。
_$ python setup.py sdist bdist_wheel # adjust as needed
$ twine upload dist/*
_
古いレガシーPyPIインフラストラクチャはMarkdownをレンダリングせず、新しいWarehouseインフラストラクチャのみがレンダリングします。レガシーインフラストラクチャはなくなりました(2018-04-30現在)。
現在、PyPIは _readme_renderer
_ library を介して cmarkgfm
をマークダウンレンダラーとして使用します(readme_renderer.markdown.render(long_description)
を使用してHTML出力を生成します)。これは、マークダウンドキュメントが GitHubとまったく同じをレンダリングすることを意味します。基本的に同じレンダラーです。
パッケージ_long_description
_を検証するには、 _twine check
_コマンド (twine
1.12.0以降)を使用します。
以前の<2018-03-16の回答は以下のとおりです。
注:これは古い、今では時代遅れの回答です。2018-03-16現在、適切なツールを使用すればMarkdownがサポートされています。上記を参照してください。
PyPIはMarkdownを not サポートしているため、READMEはHTMLにレンダリングされません。
レンダリングされたREADMEが必要な場合は、reStructuredTextを使用してください。 reStructuredTextのスフィンクス入門 が出発点として適しています。
ドキュメントをローカルでテストできるように、おそらく docutils
package をインストールする必要があります。含まれている_rst2html.py
_スクリプトをREADME=で実行して、発生したエラーがある場合はそれを確認します。特定のサンプルに多すぎるエラーがある場合:
_$ bin/rst2html.py test.rst > /tmp/test.html
test.rst:7: (ERROR/3) Unexpected indentation.
test.rst:3: (WARNING/2) Inline literal start-string without end-string.
test.rst:3: (WARNING/2) Inline interpreted text or phrase reference start-string without end-string.
test.rst:11: (WARNING/2) Block quote ends without a blank line; unexpected unindent.
test.rst:11: (WARNING/2) Inline literal start-string without end-string.
test.rst:11: (WARNING/2) Inline interpreted text or phrase reference start-string without end-string.
_
コードブロックはGithubのMarkdown拡張機能を使用していますが、これはreStructuredTextにとってまったく間違っています。 reSTコードブロックを使用できます(おそらく、docutilsのPyPIバージョンが十分に新しい場合)。
_.. code-block:: python
@attr(section='MySection', type='functional+', module='MyModule', id=1)
def test_function(self):
"""
This is the original docstring
"""
pass
_
これをローカルでテストするには、 Pygments もインストールする必要があります。
興味がある場合は、Markdownのサポートを追加する プルリクエスト付きの機能リクエスト があります。
@Martijn Pieters
が述べたように、 PyPi はMarkdownをサポートしていません。どこで次のトリックを学んだかわかりませんが、 Pandoc と PyPandoc を使用して、MarkdownファイルをRestructuredTextに変換してから PyPi にアップロードできます=。これを実現するには、setup.py
ファイルに次を追加します。
try:
import pypandoc
long_description = pypandoc.convert('README.md', 'rst')
except(IOError, ImportError):
long_description = open('README.md').read()
setup(
name='blah',
version=find_version('blah.py'),
description='Short description',
long_description=long_description,
)
OS Xに Pandoc をインストールするには、 Homebrew を使用しました。
brew install pandoc
PyPandoc をインストールするには、 pip を使用しました。
pip install pypandoc
PyPIは、他の回答で述べたように、マークダウンではなくrstをサポートします。ただし、pypandoc
自体は必要ありません。pandoc
だけで十分です。最初にローカルで最初のファイルを生成し、次にsetup.pyを実行してパッケージをアップロードできます。
upload.sh
:
#!/bin/bash
pandoc --from=markdown --to=rst --output=README README.md
python setup.py sdist upload
README
という名前の生成されたファイルは自動的に認識されます。必ず.gitignore
に追加してください! setup.py
は特別なことをする必要はありません。
setup.py
:
from distutils.core import setup
setup(
name='mypackage',
packages=['mypackage'], # this must be the same as the name above
version='0.2.8',
description='short',
author='Chiel ten Brinke',
author_email='<email>',
url='<github url>', # use the URL to the github repo
keywords=[], # arbitrary keywords
classifiers=[],
)
次に、bash upload.sh
を実行して、PyPIにアップロードします。
\r
文字に問題があり、README=の最初の行のみがpypiに表示される解析問題を引き起こします。以下のコードは、pypandoc
モジュールリポジトリに由来します。 :
try:
long_description = pypandoc.convert('README.md', 'rst')
long_description = long_description.replace("\r","") # Do not forget this line
except OSError:
print("Pandoc not found. Long_description conversion failure.")
import io
# pandoc is not installed, fallback to using raw contents
with io.open('README.md', encoding="utf-8") as f:
long_description = f.read()
このようにlong_description
にはReadmeのサニタイズバージョンが含まれており、setup.py
スクリプトのsetup()関数に渡すことができます。
私のために働いた良いピップパッケージがあります
https://pypi.python.org/pypi/restructuredtext_lint/
私は今、セットアップでそれを使用しています:
https://github.com/pablodav/burp_server_reports/blob/master/setup.py
def check_readme(file='README.rst'):
"""
Checks readme rst file, to ensure it will upload to pypi and be formatted correctly.
:param file:
:return:
"""
errors = rst_lint.lint_file(file)
if errors:
msg = 'There are errors in {}, errors \n {}'.format(file, errors[0].message)
raise SystemExit(msg)
else:
msg = 'No errors in {}'.format(file)
print(msg)
また、後でpy.testで使用できるようにlibを作成しました
https://github.com/pablodav/burp_server_reports/blob/master/burp_reports/lib/check_readme.py