パッケージをPython Package Index( https://pypi.python.org/pypi )my README有効なreStructuredTextで書き込まれ、README.rstとして保存されたファイルは、フォーマットなしでプレーンテキストとして表示されます。
バリデーター(rstctlとcollective.checkdocs)を介して実行しましたが、エラーは返されません。
私のパッケージは次の場所にあります: https://pypi.python.org/pypi/lcinvestor
Githubの次の場所にあります: https://github.com/jgillick/LendingClubAutoInvestor
リンクに関する@sigmavirusからの回答は近いことがわかりました。 distutilsメーリングリストで discussion を開始しましたが、ページ内リンク(つまり、#minimum-cash)がpypi reStructuredTextパーサーで許可されておらず、ドキュメント全体が無効になることがわかりました。
Pypiはホワイトリストを使用してリンクプロトコル(http vs ftp vs Gopher)をフィルタリングし、「#」を無効なプロトコルと見なしているようです。これは彼らの側でかなり簡単に修正できるようですが、それまでは、ページ内のアンカーリンクを削除します。
collective.checkdocs
無効な構成を検出するパッケージ:
pip install collective.checkdocs python setup.py checkdocs
次に、次のpython関数を使用して、sphinx-only構造をフィルターで除外できます(追加する必要がある場合があります)あなたのコンテンツに一致するように、より多くの正規表現):
#!/usr/bin/python3
"""
Cleans-up Sphinx-only constructs (ie from README.rst),
so that *PyPi* can format it properly.
To check for remaining errors, install ``sphinx`` and run::
python setup.py --long-description | sed -file 'this_file.sed' | rst2html.py --halt=warning
"""
import re
import sys, io
def yield_sphinx_only_markup(lines):
"""
:param file_inp: a `filename` or ``sys.stdin``?
:param file_out: a `filename` or ``sys.stdout`?`
"""
substs = [
## Selected Sphinx-only Roles.
#
(r':abbr:`([^`]+)`', r'\1'),
(r':ref:`([^`]+)`', r'`\1`_'),
(r':term:`([^`]+)`', r'**\1**'),
(r':dfn:`([^`]+)`', r'**\1**'),
(r':(samp|guilabel|menuselection):`([^`]+)`', r'``\2``'),
## Sphinx-only roles:
# :foo:`bar` --> foo(``bar``)
# :a:foo:`bar` XXX afoo(``bar``)
#
#(r'(:(\w+))?:(\w+):`([^`]*)`', r'\2\3(``\4``)'),
(r':(\w+):`([^`]*)`', r'\1(``\2``)'),
## Sphinx-only Directives.
#
(r'\.\. doctest', r'code-block'),
(r'\.\. plot::', r'.. '),
(r'\.\. seealso', r'info'),
(r'\.\. glossary', r'rubric'),
(r'\.\. figure::', r'.. '),
## Other
#
(r'\|version\|', r'x.x.x'),
]
regex_subs = [ (re.compile(regex, re.IGNORECASE), sub) for (regex, sub) in substs ]
def clean_line(line):
try:
for (regex, sub) in regex_subs:
line = regex.sub(sub, line)
except Exception as ex:
print("ERROR: %s, (line(%s)"%(regex, sub))
raise ex
return line
for line in lines:
yield clean_line(line)
および/またはあなたのsetup.py
ファイル、次のようなものを使用します::
def read_text_lines(fname):
with io.open(os.path.join(mydir, fname)) as fd:
return fd.readlines()
readme_lines = read_text_lines('README.rst')
long_desc = ''.join(yield_sphinx_only_markup(readme_lines)),
または、次のファイルでsed
unix-utilityを使用することもできます。
## Sed-file to clean-up README.rst from Sphinx-only constructs,
## so that *PyPi* can format it properly.
## To check for remaining errors, install ``sphinx`` and run:
##
## sed -f "this_file.txt" README.rst | rst2html.py --halt=warning
##
## Selected Sphinx-only Roles.
#
s/:abbr:`\([^`]*\)`/\1/gi
s/:ref:`\([^`]*\)`/`\1`_/gi
s/:term:`\([^`]*\)`/**\1**/gi
s/:dfn:`\([^`]*\)`/**\1**/gi
s/:\(samp\|guilabel\|menuselection\):`\([^`]*\)`/``\1``/gi
## Sphinx-only roles:
# :foo:`bar` --> foo(``bar``)
#
s/:\([a-z]*\):`\([^`]*\)`/\1(``\2``)/gi
## Sphinx-only Directives.
#
s/\.\. +doctest/code-block/i
s/\.\. +plot/raw/i
s/\.\. +seealso/info/i
s/\.\. +glossary/rubric/i
s/\.\. +figure::/../i
## Other
#
s/|version|/x.x.x/gi
(クイックスキャン後に)最初に表示されるのは、[高度なフィルター]セクションで、リンクの後に2つのアンダースコアを使用していることです。
`Link text <http://example.com>`__
あるべき場所
`Link text <http://example.com>`_
ReStructuredTextチェッカーがそれをキャッチしなかったのは奇妙です。 docutilsもインストールされている場合は、rst2html.py README.rst
を実行すると、HTMLが出力されます。エラーがある場合は失敗し、エラーがどこにあったかを教えてくれます。
また、公正な警告、リストには先頭にスペースを入れないでください。
- foo
- bar
の代わりに
- foo
- bar
(視覚的に明確にするため)
- foo # correct
- one too many for a regular list, it will show up as a quoted list
また、相対リンクはText to link <#link>_
のようには機能しません。別のセクションにリンクする場合は、次のことを行う必要があります。
Here's my `link <section_name>`_ to the other section.
.. Other stuff here ...
.. _section_name:
Min/Max Investment Opportunities and Other Foo Biz Baz
------------------------------------------------------
私は同じ問題を抱えていました私のpythonモジュールをpypiにアップロードするとき。
後で、README.rstを使用してエラーをチェックしましたrst-lint
これは私のreadmeファイルが正しいことを示しています。
問題はREADMEファイルではなく、setup.py自体にあることがわかりました。