Описание PyPI markdown не работает
Я загрузил пакет в PyPi, используя:
python setup.py register -r pypi
python setup.py sdist upload -r pypi
Я пытаюсь изменить описание, я написал (Пожалуйста, не редактируйте форматирование следующего фрагмента кода, я сделал это с целью продемонстрировать свою проблему):
**nose-docstring-plugin**
This plugin enables you to modify docstring of tests based on their attributes, for example:
```python
@attr(section='MySection', type='functional+', module='MyModule', id=1)
def test_function(self):
"""
This is the original docstring
"""
pass
```
однако текст выглядит так, как есть,без форматирование markdown. Что я делаю не так?
6 ответов
по состоянию на 16 марта 2018 года, PyPI.org aka Warehouse (наконец) поддерживает уценку в длинных описаниях. Склад заменил старую устаревшую реализацию PyPI в апреле 2018 года.
вам нужно:
убедится
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 2.1.
-
использовать
twine
чтобы загрузить свои дистрибутивы в PyPI:$ python setup.py sdist bdist_wheel # adjust as needed $ twine update dist/*
старая устаревшая инфраструктура PyPI не будет отображаться Markdown, только новая инфраструктура склада делает. Наследие инфраструктуры не стало (как в 2018-04-30).
в настоящее время PyPI использует cmarkgfm
как визуализатор markdown, через readme_renderer
библиотека (через readme_renderer.markdown.render(long_description)
для получения вывода HTML). Это означает, что ваши документы markdown будут отображать точно так же как и на GitHub; это по существу тот же рендерер.
старый
Примечание: это старый, теперь устаревший ответ, по состоянию на 2018-03-16 Markdown поддерживается при условии, что вы используете правильные инструменты, см. выше.
PyPI делает не поддержка Markdown, поэтому ваш README не будет отображаться в HTML.
если вы хотите визуализированный README, придерживайтесь reStructuredText;введение Сфинкса в reStructuredText - хорошее начало точка.
вы, вероятно, хотите установить docutils
пакета таким образом, вы можете проверить свой документ локально; вы хотите запустить включенный 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.
ваш блок кода использует расширения Markdown Github, которые полностью неверны для reStructuredText. Вы можете использовать блок кода reST (возможно, если версия PyPI docutils является новой достаточно):
.. code-block:: python
@attr(section='MySection', type='functional+', module='MyModule', id=1)
def test_function(self):
"""
This is the original docstring
"""
pass
чтобы проверить это локально, вам необходимо установить одном как хорошо.
есть запрос функции с запросом pull чтобы добавить поддержку Markdown, если вы заинтересованы.
As @Martijn Pieters
указано, PyPi не поддерживает Markdown. Я не уверен, где я узнал следующий трюк, но вы можете использовать Pandoc и PyPandoc для преобразования файлов Markdown в RestructuredText перед загрузкой в PyPi. Для этого добавьте в свой :
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,
)
установить Pandoc на OS X, я использовал доморощенного:
brew install pandoc
pip install pypandoc
PyPI поддерживает rst, а не markdown, как упоминалось в других ответах. Но вам не нужно pypandoc
перс, просто pandoc
- это хорошо. Вы можете сначала создать первый файл локально, а затем запустить setup.py чтобы загрузить пакет.
upload.sh
:
#!/bin/bash
pandoc --from=markdown --to=rst --output=README README.md
python setup.py sdist upload
сгенерированный файл с именем README
будет автоматически распознан. Обязательно добавьте его в свой .gitignore
! The 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 () в вашем setup.py
сценарий.
есть хороший пакет pip, который работал для меня
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)
также я создал lib, чтобы иметь возможность использовать в py.тест позже
https://github.com/pablodav/burp_server_reports/blob/master/burp_reports/lib/check_readme.py
выполнить эти три команды и он будет работать
pip install --upgrade setuptools
pip install --upgrade twine
pip install --upgrade wheel