2012-08-03 51 views

回答

0

這是另一種方法,可能更適合大型項目。

首先,定義在site_scons/site_toolsepydoc.py(或任何你有這些)是:

# -*- coding: utf-8 -*- 
import SCons.Builder 
import SCons.Action 

def complain_epydoc(target, source, env): 
    print 'INFORMATION: epydoc binary was not found (see above). Documentation has not been built.' 

def generate(env): 
    env['EPYDOC'] = find_epydoc(env) 
    if env['EPYDOC'] != None: 
     opts = '--quiet --html --inheritance listed --graph all --css white --parse-only ' 
     env['EPYDOCCOM'] = '$EPYDOC ' + opts + '-o $TARGET $SOURCES' 
     env['BUILDERS']['epydoc'] = SCons.Builder.Builder(action=env['EPYDOCCOM']) 
    else: 
     env['BUILDERS']['epydoc'] = SCons.Builder.Builder(action=env.Action(complain_epydoc)) 

def find_epydoc(env): 
    b=env.WhereIs('epydoc') 
    if b == None: 
     print 'Searching for epydoc: not found. Documentation will not be built' 
    else: 
     print 'Searching for epydoc: ', b 
    return b 

def exists(env): 
    if find_epydoc(env) == None: 
     return 0 
    return 1 

在主SConstruct文件,添加:

import epdoc 
env.Tool("epydoc") 

然後,在你的SConstruct文件或SConscript文件,你可以建立像這樣的文檔:

Alias('epydoc', env.epydoc(source=python_code_files, target=Dir('docs'))) 

注意:你可以對ctags和pylint做同樣的事情,僅舉幾例。

1

您可以使用Command() builder而不是創建自己的構建器。

例如,可以按如下方式執行epydoc的:

# SCons will substitute $SOURCE and $TARGET accordingly 
# add any extra cmd line args you need to the cmd string 
cmd = 'epydoc $SOURCE $TARGET' 
env.Command(target = yourTarget, source = yourSourceFile_s, action = cmd) 
0

這裏是我最終使用的基礎上,Bradyanswer

## Create epydoc! 
import os.path 
if os.path.isfile('/usr/bin/epydoc'): 
    sources = Split("__init__.py ook/ eek/ fubar/") 
    cmd = "epydoc -q --name 'Isotek Python Module collection' " + \ 
      "--html --inheritance listed --graph all -o docs --css white " + \ 
      "--parse-only --debug $SOURCES" 
    env.Command(target = Dir('docs'), source = sources, action = cmd) 
else: 
    print "WARNING -- Cannot run epydoc so documentation will not be generated." 
    print "WARNING -- To install epydoc run 'sudo yum -y install epydoc'." 

請注意,我在Fedora上運行,並不需要擔心的代碼運行在別處因此我可以假設的路徑以及如何安裝epydoc的。更普遍的編輯​​是受歡迎的。

+0

爲什麼你有target ='dummy'?如果你沒有使用真正的目標,那麼SCons會每次運行epydoc,即使它不需要,也可能會有問題。您應該能夠將目標指定爲由epydoc生成的實際文件,然後SCons只會在需要時執行它。 – Brady 2012-08-03 10:41:36

+0

@Brady:的確如此。這是次優。我最終使用了完全不同的東西。 – Sardathrion 2012-08-03 12:54:37