将Python 3转换为可由autodoc读取的“简单”python

时间:2011-04-09 15:15:35

标签: python python-sphinx autodoc

我在Python 3中编写了一个程序,并使用Sphinx来记录它。 Sphinx的autodoc很棒,但它只适用于Python 2.有些模块在autodoc中工作正常,但模块却没有。一些例子:Python 2抱怨Python 3样式元类,以及一些在Python 2中不再存在的模块,例如 configparser 。这很烦人,因为它无法从该文件中导入文档字符串。

我不想在Python 2中重写整个程序,但我想使用autodoc。

我的一个想法是一个小程序,它读取每个Python文件并删除所有功能,但只是将基本函数和类与其文档字符串一起离开(因为autodoc导入每个模块并读取特定函数或类的文档字符串)。 / p>

import configparser
import os

class TestClass:
    """
    I am a class docstring.
    """
    def method(self, argument):
        """
        I am a method docstring.
        """
        #Some code here
        print(os.getcwd())

def TestFunction():
    """
    I am a function docstring.
    """
    #Some more useless code here
    return os.path.join("foo", "bar")

...成

class TestClass:
    """
    I am a class docstring.
    """
    def method(self, argument):
        """
        I am a method docstring.
        """
        pass

def TestFunction():
    """
    I am a function docstring.
    """
    pass

通过这种方式,处理过的代码可以通过autodoc读取,但仍然具有我真正需要的文档字符串。这是解决这个问题的最好方法吗,有没有人对如何编写转换代码的小程序有任何建议。

我可以使用一些正则表达式轻松删除元类问题,但我正在努力解决其余问题。

m = re.search("\(metaclass=.*\)", file_content)
if m:
    file_content = "".join(file_content[:m.start()], file_content[m.end():])

ast 模块是否有用?

感谢。

3 个答案:

答案 0 :(得分:5)

您可以安装sphinx的开发版本,它支持python 3。

pip-3.2 install hg+https://bitbucket.org/birkenfeld/sphinx

我测试了你班上的autodoc功能,但它确实有效。

答案 1 :(得分:1)

解决方案往往是在代码中使用try / except子句。

Python 2.6有configparser,但它被称为ConfigParser(python 3将camelcase名称改为全部小写)

如下所示:

try:
  import configparser
except ImportError:
  #we are in 2.x
  import ConfigParser as configparser

你可能想要做一些这样的事情,它会被打破。两者之间。虽然两者之间的元类我不确定处理。

答案 2 :(得分:0)

有一个3to2 library可以将Python 3代码转换为python 2.你可以和Sphinx一起试试这个。