在 Emacs 中执行 Pyhton
- 2019 年 10 月 30 日
- 筆記
最近在整理 Python 的相关的内容,主要需要整理成笔记,记录下来,等有需要的时候再进行复习。
在编写 org 的时候,发现 Python 的内容并不能很好的执行,而且生成的图片也不能正常显示,所以查询了一下资料,发现如果是 python 的话,需要按下面的形势处理:
#+BEGIN_SRC python :results file :preamble "# -*- coding: utf-8 -*-" :python python3 :exports both
其中 :results
针对不同的执行结果进行调整,如果是想把 Python 生成的图片显示在 org 文档里的话,就要选择 file ,如果是想显示执行的结果的话,就使用 output 。
:preamble
的话,是针对 Python 的码制了,现在如果有中文的话,可能需要指定为 utf-8 所以默认需要加上这个内容。
:python
是用来指定解释器的,在 Mac 环境下,执行的时候,总是提示找不到 pandas 但是如果直接使用 python test.py
的话是能正常显示结果,可能是因为默认查找的 python2 吧,这里进行指定到 python3 上就可以使用了。
:exports
是指定输出的情况的,code 是指显示代码,results 是指的仅显示结果,both 是两个都显示,none 则是指的都不显示。
:session
是特殊情况,有些时候需要调用方法中的 return 使用 session 的话能直接使用,可以不必再单独返回了。
:var
可以指定传入的参数
使用示例如下:
#+tblname: data_table | a | 1 | | b | 2 | | c | 3 | #+begin_src python :var val=1 :var data=data_table return(data[val]) #+end_src #+RESULTS: | b | 2 | #+begin_src python :results file import matplotlib, numpy matplotlib.use('Agg') import matplotlib.pyplot as plt fig=plt.figure(figsize=(4,2)) x=numpy.linspace(-5,5) plt.plot(numpy.sin(x)/x) fig.tight_layout() plt.savefig('./images/python-matplot-fig.png') return './images/python-matplot-fig.png' # return filename to org-mode #+end_src #+RESULTS: [[file:./images/python-matplot-fig.png]]
将这个内容增加到 snippet 中去,在 snippet/org-mode/ 路径下增加 python 文件,其中内容如下
# -*- mode: snippet -*- # name: python # key: <pyt_ # -- #+begin_src python :results ${1:file} :preamble "# -*- coding: utf-8 -*-" :python python3 :exports ${2:both} $0 #+end_src [[file:${3:path}]]
之后,在 org 文档中,输入 <pyt_
输入 tab 键就可以自动补全成可用内容了。