python 在Markdown和reStructuredText中具有相同的README

bfhwhh0e  于 2023-04-04  发布在  Python
关注(0)|答案(8)|浏览(132)

我有一个托管在GitHub上的项目。为此,我使用Markdown语法编写了我的README,以便在GitHub上很好地格式化它。
由于我的项目是用Python编写的,我还计划将其上传到PyPi。PyPi上的README使用的语法是reStructuredText。
我想避免必须处理两个包含大致相同内容的README;所以我搜索了一个markdown到RST(或其他方式)的翻译器,但找不到。
我看到的另一个解决方案是执行markdown/HTML,然后执行HTML/RST翻译。我找到了一些herehere的资源,所以我猜这应该是可能的。
你有什么想法可以更好地配合我想做的事情吗?

11dmarpk

11dmarpk1#

我推荐Pandoc,它是“将文件从一种标记格式转换为另一种标记格式的瑞士军刀”。(查看页面底部支持的转换图,相当令人印象深刻). Pandoc允许markdown直接reStructuredText翻译.还有一个在线编辑器here可以让你尝试一下,所以你可以简单地使用在线编辑器来转换你的README文件。

46scxncf

46scxncf2#

正如@Chris所建议的,您可以使用Pandoc将Markdown转换为RST。这可以简单地使用 pypandoc 模块和www.example.com中的一些魔术来自动化setup.py:

from setuptools import setup
try:
    from pypandoc import convert
    read_md = lambda f: convert(f, 'rst')
except ImportError:
    print("warning: pypandoc module not found, could not convert Markdown to RST")
    read_md = lambda f: open(f, 'r').read()

setup(
    # name, version, ...
    long_description=read_md('README.md'),
    install_requires=[]
)

这将自动将www.example.com转换README.md为RST,以用于PyPi上的长描述。当 pypandoc 不可用时,它只读取README.md而不进行转换-当其他人只想构建模块而不是上传到PyPi时,不会强迫他们安装pypandoc。
所以你可以像往常一样在Markdown中写作,不再关心RST混乱。

goqiplq2

goqiplq23#

2019更新

PyPI Warehouse now supports也渲染了Markdown!你只需要更新你的包配置并添加long_description_content_type='text/markdown'到其中。例如:

setup(
    name='an_example_package',
    # other arguments omitted
    long_description=long_description,
    long_description_content_type='text/markdown'
)

因此,没有必要再将README保持为两种格式。
您可以在documentation中找到有关它的更多信息。

旧答案:

GitHub使用的Markup库支持reStructuredText。这意味着您可以编写README.rst文件。
它们甚至支持使用codecode-block指令(Example)进行语法特定的颜色突出显示

nhaq1z21

nhaq1z214#

PyPI现在支持长描述的Markdown!
setup.py中,将long_description设置为Markdown字符串,添加long_description_content_type="text/markdown"并确保您使用的是最新的工具(setuptools 38.6.0+,twine 1.11+)。
有关详细信息,请参见Dustin Ingram's blog post

ruoxqz4g

ruoxqz4g5#

您可能还对以下事实感兴趣:可以在公共子集中编写,以便您的文档在呈现为markdown或呈现为reStructuredText时以相同的方式呈现:https://gist.github.com/dupuy/1855764

brtdzjyr

brtdzjyr6#

对于我的需求,我不想在我的计算机上安装Pandoc。我使用docverter。Docverter是一个文档转换服务器,具有使用Pandoc的HTTP接口。

import requests
r = requests.post(url='http://c.docverter.com/convert',
                  data={'to':'rst','from':'markdown'},
                  files={'input_files[]':open('README.md','rb')})
if r.ok:
    print r.content
mefy6pfw

mefy6pfw7#

我遇到了这个问题,用下面的两个bash脚本解决了它。
请注意,我已经将LaTeX捆绑到我的Markdown中。

#!/usr/bin/env bash

if [ $# -lt 1 ]; then
  echo "$0 file.md"
  exit;
fi

filename=$(basename "$1")
extension="${filename##*.}"
filename="${filename%.*}"

if [ "$extension" = "md" ]; then
  rst=".rst"
  pandoc $1 -o $filename$rst
fi

转换成html也很有用。md2html:

#!/usr/bin/env bash

if [ $# -lt 1 ]; then
  echo "$0 file.md <style.css>"
  exit;
fi

filename=$(basename "$1")
extension="${filename##*.}"
filename="${filename%.*}"

if [ "$extension" = "md" ]; then
  html=".html"
  if [ -z $2 ]; then
    # if no css
    pandoc -s -S --mathjax --highlight-style pygments $1 -o $filename$html
  else
    pandoc -s -S --mathjax --highlight-style pygments -c $2 $1 -o $filename$html
  fi
fi

希望能有所帮助

jvidinwx

jvidinwx8#

使用其他人建议的pandoc工具,我创建了一个md2rst实用程序来创建rst文件。即使这个解决方案意味着你有一个md和一个rst,它似乎是侵入性最小的,并且允许未来添加任何markdown支持。我更喜欢它而不是改变setup.py,也许你也会这样做:

#!/usr/bin/env python

'''
Recursively and destructively creates a .rst file for all Markdown
files in the target directory and below.

Created to deal with PyPa without changing anything in setup based on
the idea that getting proper Markdown support later is worth waiting
for rather than forcing a pandoc dependency in sample packages and such.

Vote for
(https://bitbucket.org/pypa/pypi/issue/148/support-markdown-for-readmes)

'''

import sys, os, re

markdown_sufs = ('.md','.markdown','.mkd')
markdown_regx = '\.(md|markdown|mkd)$'

target = '.'
if len(sys.argv) >= 2: target = sys.argv[1]

md_files = []
for root, dirnames, filenames in os.walk(target):
    for name in filenames:
        if name.endswith(markdown_sufs):
            md_files.append(os.path.join(root, name))

for md in md_files:
    bare = re.sub(markdown_regx,'',md)
    cmd='pandoc --from=markdown --to=rst "{}" -o "{}.rst"'
    print(cmd.format(md,bare))
    os.system(cmd.format(md,bare))

相关问题