在Windows系统中,如何在Emacs中运行Python?

4

我刚刚在Windows上安装了Python 2.7以及IPython。

以前我习惯于在Linux中的Emacs内运行IPython,例如:

M-x shell

然后在提示符处输入“ipython”。在Linux下,这很正常,但在Windows下,打印IPython横幅文本后会挂起,也就是说,它看起来像是在工作,但你永远无法得到IPython提示符。我可以在Windows下从标准cmd终端加载IPython(和Python),但不能从Emacs中加载。有人遇到了类似的问题或者已经解决了这个问题吗?当我尝试启动纯旧版Python时,也会遇到相同的问题。

1
祝你好运 Hiett - emacs 和 Windows。 - Burhan Khalid
公正评论 - 我正在将一些软件移植到Windows,并尝试使我的开发过程尽可能相同(简单?),例如从Samba共享运行在Windows虚拟机上的Emacs和MinGW。我用Python编写了一个系统测试框架,并希望在Windows上运行与Linux上相同的黑盒测试,因此提出了这个问题。 - bph
3
你不使用run-python有特别的原因吗?在Windows上,它似乎可以直接运行于emacs 24.2(如果你想要使用ipython而非默认设置,可能需要使用M-x customize-variable python-command)。 - Inaimathi
@Inaimathi:我在Windows上使用Emacs 24.3.1。run-python返回“正在搜索程序:权限被拒绝,nil”。我没有定义python-command - user443854
3个回答

2

在Windows中,这并不容易实现,而且非常烦人。首先,请确保您已安装pyreadline。

接下来,我使用了一个位于系统路径中的批处理文件,使其正常运行,该文件包含以下内容:

[ipython.bat]
@python.exe -i C:\devel\Python\2.7-bin\Scripts\ipython.py  --pylab %*

接下来获取python-mode.el并删除ipython.el。后者已被弃用,而python-mode已包含其功能。

相应地更改ipython.py文件的路径并保存它。现在在您的Emacs中,在init.el文件中执行以下操作。

(custom-set-variables
 '(py-shell-name "ipython.bat"))

另外,要达到最后一步,执行C-h v <RET> py-shell-name并将其自定义为ipython.bat或您的ipython.bat的完整路径(如果脚本目录不在系统路径中)。保存以供未来会话使用。

这样就可以让您的IPython shell工作了。如果您想要多个交互式matplotlib图形而不挂起IPython控制台,则还有一个警告。我能够解决此问题的唯一方法是使用IPython 0.10而不是当前版本。


1
使用python -iipython -i代替pythonipython对我很有用(它让我在Emacs中获得提示,而不是无限期地挂起)。
从python --help中得到:

-i :运行脚本后交互式检查;即使标准输入不是终端,也会强制出现提示符;还可以设置PYTHONINSPECT=x。


然而,生成的Python解释器可能不完全功能。你有两个选择:
  • 如果你正在使用conda环境中的Python:建议你切换到适当的Python安装。这并不意味着删除Anaconda,只需从https://www.python.org/downloads/windows/下载Python,并从Windows的%PATH%变量中删除Anaconda的Python。如果不这样做,你将遇到许多问题,如图片显示,conda的激活(conda activate base)等等,我从未成功地解决过所有这些问题。
  • 如果你正在使用python.org/downloads中的Python:你走上了正确的道路!检查Python是否可以从命令行访问(Win+R cmd python),如果无法访问,请将其路径添加到Windows Path变量中。
现在你需要使图像显示正常工作。默认情况下,matplotlib.pyplot在Emacs中运行缓慢。你需要做以下操作:
首先,请检查是否已经下载了ipython包(pip install ipython),以及matplotlib和numpy(如果你使用它们,但谁不用呢:pip install matplotlibpip install numpy)。

然后在您的计算机上找到ipython-script.py的位置(在文件资源管理器中键入“ipython-script.py”即可找到它),并将其作为参数放入变量python-shell-interpreter-args中,在“-i ”之后。还要检查python-shell-interpreter是否设置为python。您应该有类似于:

(setq python-shell-interpreter "python")
(setq python-shell-interpreter-args "-i c:/Users/YOUR-USER-NAME/AppData/Local/Continuum/anaconda3/Scripts/ipython-script.py") 

这样,您就可以直接从Emacs中运行Python shell,方法是使用M-x run-python命令(或者,在Python文件中,使用C-c C-p,然后使用C-c C-c命令)。

当然,如果您愿意的话,也可以在shell终端中执行相同的操作,使用以下命令: python -i "c:/Users/YOUR-USER-NAME/AppData/Local/Continuum/anaconda3/Scripts/ipython-script.py"

或者,您可以创建一个批处理文件,其中包含相同的命令。但这不是必要的。

(已测试使用 Python 3.8)


1

我希望我早些时候看到了这篇文章。我在Emacs中运行Python和IPython的经验如下:

我尝试了许多选项(在Windows 7上使用python(x,y)-2.7.3.0)

使用ipython.el:

它仍然可以工作,前提是您更改ipython-command。我不建议这样做,因为更改ipython-command会使ipython.el失去一些功能。

您可以显示图像,但提示符会冻结,直到您关闭图像。

裸的Python无法工作

更改py-shell-name(如上所述):当我添加--pylab选项时,我的图形始终挂起

我总是得到一个IPython终端

引入包含ipython.bat的文件

@C:\\Python27\\python.exe -i -u C:\\Python27\\Scripts\\ipython-script.py %*

将路径更改为在 ipython.exe 之前找到的 ipython.bat

IPython 可以工作,但仍然只有一个线程(必须关闭图形才能返回 shell)

Python 也可以工作,并且所有来自 python-mode.el 的其余功能也可以使用

我仍然需要弄清如何在打开图形后返回 shell(在 emacs 中)。我已经成功使用 Python 2.6 和旧版本的 IPython。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接