2015-10-16 123 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,我已經添加了關於如何做的信息。 –