2015-10-16 68 views
3

关于在Markdown文档中使用Python代码有很多信息。但这一切似乎都是关于演示Python片段,而不是创建好看的文档。在Markdown中运行Python代码

难道我不能在单个文档中使用Python和Markdown,就像使用R和Markdown一样?

MWE:

Output some text from Python in **Markdown**: 
```python 
from sklearn.datasets import load_iris 
from sklearn import tree 
iris = load_iris() 
clf = tree.DecisionTreeClassifier() 
clf = clf.fit(iris.data, iris.target) 
print(clf.predict_proba(iris.data[:1, :])) 
``` 

编译如下:markdown_py markdown.txt

<p>Output some text from Python in <strong>Markdown</strong>: 
<code>python 
from sklearn.datasets import load_iris 
from sklearn import tree 
iris = load_iris() 
clf = tree.DecisionTreeClassifier() 
clf = clf.fit(iris.data, iris.target) 
clf.predict_proba(iris.data[:1, :])</code></p> 

它显示的代码(凉),但不实际运行它。

你不能在Markdown中运行Python代码吗?如果不是,还有什么替代方案?

(使用Ubuntu的蟒蛇,降价包)。

+2

Markdown只是一种文本标记格式。可能有也可能没有库也执行嵌入在这些文档中的代码,但默认情况下,这超出了Markdown的范围。使用ReST标记的狮身人面像可以执行这样的代码IIRC;我不知道Markdown是否存在同样的问题。 – deceze

+0

谢谢。但是ReST没有做我想做的事。它似乎是docbook的替代品。生成文档很酷,但不生成文档和演示文稿。我想在markdown中运行python代码,就像你可以用R做的一样。(见下面的答案) –

+2

我想你想使用Jupyter/IPython Notebook:https://jupyter.org/,或者如果你希望使用Beaker,语言支持:http://beakernotebook.com/ – Leo

回答

2

好吧,我只是找到了一个解决方案:

使用块为:

<<engine='python', engine.path='python3'>>= 
# python code 
@ 
  • engine.path默认使用python可执行文件,在大多数Linux系统中仍然是python2。如果你想要Python 2,你可以省略它。
  • 如果你想省略代码打印输出和results='asis',不要忘记通过echo=FALSE,这样它就不会尝试转义输出。

您可以使用以下块在文档的beggining来设置的默认值:

<<r setup, include=FALSE>>= 
knitr::opts_chunk$set(echo=FALSE, engine='whathaveyou', ...) 
@ 

将文件另存为markdown.Rmd,并使用R 2与knitr编译它。它将使用python运行Python代码。

R指令:rmarkdown::render('markdown.Rmd','output.html')

或者只是使用RStudio

附录:原生解决方案显然是Pweave:它与乳胶和降价。尽管如此,我还没有尝试过。

+0

那么你在块中使用R代码的Python代码语法,如--- {r} ---? (三个口音没有出现在评论中出于某种原因,所以我用三个破折号替换) – lara

+0

@lara,我已经添加了关于如何做的信息。 –