我试图在setup.py
的包描述中重用README.rst中的信息在我的setup.py中,我有一个自述文件功能:
def readme():
try:
with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as f:
return f.read()
except (IOError, OSError):
return ''
我打电话给
setup(
...
long_description=readme(),
...
)
因为我的reStructuredText是一个相当庞大的README.rst,所以只读一个重组文本的特定部分可能是更好的方法。
是否有一种智能方法可以重写readme()
,以便它解析README.rst并忽略其余的reStructuredText格式,即只提供一个小子节的纯文本?
答案 0 :(得分:1)
我认为你可以使用DocUtils的这一部分:
“解析文件
Parser分析输入文档并创建节点树 表示。在这种情况下,我们使用reStructuredText解析器 (docutils的/解析器/ RST /的初始化强>的.py)。查看节点树的外观 比如,我们调用quicktest.py(可以在tools /目录中找到) 我们的示例文件(test.txt)为:Docutils发行版) 第一个参数(Windows用户可能需要输入python quicktest.py 的test.txt):
$ quicktest.py test.txt 我的 喜爱 语言是 蟒蛇 。 现在让我们检查节点树:
顶级节点是文档。它有一个source属性的值 是text.txt。有两个子节点:段落节点和目标 节点。该段又有子节点:文本节点(“我的”),一个 强调节点,文本节点(“语言是”),参考节点和 再一个Text节点(“。”)。
这些节点类型(文档,段落,重点等)都已定义 在docutils / nodes.py中。节点类型在内部排列为 类层次结构(例如,强调和引用都具有 常见的超类内联)。获取节点类的概述 层次结构,使用epydoc(类型epydoc nodes.py)并查看该类 层次结构树。“ - http://docutils.sourceforge.net/docs/dev/hacking.html
只查找总文档所需的节点:)然后只写相关节点
答案 1 :(得分:1)
我最终得到了这个,这不是完美的但是做了这个工作:
def readme():
try:
import docutils
except ImportError:
try:
with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as f:
return f.read()
except (IOError, OSError):
return ''
with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as f:
document = docutils.core.publish_doctree(f.read())
nodes = list(document)
description = ''
for node in nodes:
if str(node).startswith('<topic classes="contents"'):
break
if type(node) is docutils.nodes.comment\
or type(node) is docutils.nodes.title:
continue
description += node.astext() + '\n'
return return description.encode('ascii', 'ignore').strip()
我想通过走rST文档树可以做一个更好更复杂的解析。