有用 lpy 的吗?交流一下

M-x run-python行不行

不行,仍然只有一个 default

@fuxialexander

不知道 lispy 有没有这样的功能,就是执行一个大标题时,可以跳过其中的一个小标题下的代码:

# * Title 1
# ** Title 1.1
print "This line will run."
# ** Title 1.2 [skip]
print "Skip this line." 
# ** Title 1.3
print "This line will run too."

结果得到

This line will run.
This line will run too.

这个功能对我非常重要,因为我大部分时候是交互式运行代码,有些时候代码有多种替代方案,然后我只运行其中一种(其中一个小标题),但是整体功能都包含在大标题下。

或者一键注释掉小标题下所有内容也行

outshine-comment-subtree-content in outshine package

其实我觉得最好还是写成function 在大block里直接调用

1 个赞

一般不敢写函数,我有命名恐惧症 :sweat_smile:

我发现有的时候用 dired 拷贝过来到当前文件夹的文件,lpy eval 的时候仍然是之前文件的路径,好奇怪啊。不知道是哪的毛病,你碰到过这个问题没有?

import os
os.getcwd()

可能没有重启python session吧 你把和lpy以及python process有关的buffer都kill了试试?

重启 python session 也没有用,重启 emacs 有用

我发现真是太白痴了,开始一个新进程只要输入一个不同的进程名字就好了。

这个功能超级有用,比如我现在两套配置,一套对应py2的虚拟环境,使用python作为解释器,一套对应py3的虚拟环境,使用ipython作为解释器,简直了,完胜其它交互 python 环境。

abo-abo 是真正的大神,而且非常容易沟通,提的 issue 一般很快就修复了。有这样一位开发者在emacs阵营真是幸运。

什么时候能把 async eval 的问题解决了,就真的是神器了。

1 个赞

我用ob-ipython不是写程序,而是写文档。本来就是一个一个三五行的小片段,连分支都没有,根本不需要思路。 inline插图是必须的,因为这是文档。

嗯,我也是这样用的,代码短的就用 ob-ipython (scimax),长的就用 lpy。另外 lpy 还有一个使用场合,就是对需要交互式操作的绘图,科学计算等等,非常好用。当然,像你所说的写文档,那是非 org 莫属。

这样说吧,我用 lpy 操作一些外部的绘图程序 mayavi,后处理程序 paraview,以及一些开源有限元都没有问题,溜到飞起,感觉连 jupyter notebook 都不能这么玩。已经远远不止是绘图这么简单了。

其实我只是忍不住安利得有点用力过猛了, :joy:

还是根据个人的需要选择最适合自己的工具吧

有的时候需要的变量太多,就要写一长串参数或者做成列表/字典传入函数,函数里在一个个提取,doctoring又要写好多,很麻烦。

确实。。我平常也是直接comment甚至直接改。。

@et2010 你是怎么在spacemacs上安装lpy的,我这样安装了

(defconst ztlevi-programming-packages
  '(
    (lpy :location (recipe :fetcher github :repo "abo-abo/lpy"))
    )
  )

(defun ztlevi-programming/init-lpy ()
  (use-package lpy))

启动时会报这个错:

Error (use-package): lpy/:catch: Cannot open load file: No such file or directory, function-args

把 function-args 这个包也添加到你的 private layer 里,不用设置

(defun lpy/init-function-args ()
  (use-package function-args
    :defer t
    :init ))

或者也可以加到 dotspacemacs-addtional-packages (好像是这个名字)中。

你碰到的问题的原因是 lpy 没有把 function-args 设为依赖,但是又确实 require 这个包了。

恩,没想到这是个包,rip。然后lpy要怎么开启呢?我看了下好像没有对应的mode诶,在python-mode下搜索它的函数也没有绑定任何快捷键。

我好像是加到 python-mode-hook 中了

(add-hook 'python-mode-hook #'lpy-mode)

可能还有其它的一些注意事项,我在上面的帖子中都提到了

好的,多谢啦

刚刚花了三个小时终于把local/remote的lpy/org-edit-src 整合设置停当

占个坑 吃饭回来上code hhh

code 见

https://github.com/fuxialexander/doom-emacs-private-xfu/blob/master/modules/lang/python/autoload.el#L18-L59

https://github.com/fuxialexander/doom-emacs-private-xfu/blob/master/modules/lang/python/config.el#L82-L84

https://github.com/fuxialexander/doom-emacs-private-xfu/blob/master/modules/lang/org-private/+babel.el#L13-L16

Example:

** DONE Test remote ob-ipython and lpy and anaconda

:PROPERTIES:
:header-args:ipython: :session remote-host-kernel-28595-ssh.json :ipyfile /local/path/test_lpy.png :pydir /ssh:user@host:/path/to/workdir :exports both :results raw drawer
:END:

- lpy and ob-ipython works at remote
- lpy completion through capf works
- company-ob-ipython is slow as hell
- company-anaconda need configuration to work on TRAMP, I dont want to fiddle with it.

#+BEGIN_SRC ipython
# %pylab
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
plt.plot([1, 2, 3, 4])
import seaborn as sns
a = np.array([1, 2, 3])
b = a.T
c = b * 100
#+END_SRC

remote使用方法:在远程server 上执行ipython kernel, 用print出来的kernel ID (一串数字)替换org properties里的ID,然后在code block上C-c C-c即可:

  • 自动建立到远程kernel的连接
  • 弹出一个连接到远程的REPL

这时在code block上C-c ' / org-edit-src-block 会弹出代码编辑窗口

  • (python-shell-send-defun) /... / lpy's eval 都可以将编辑窗口中的代码发送至刚刚打开的REPL
  • completion-at-point 会用REPL的环境进行补全
4 个赞