如何在没有控制台窗口的情况下在 Windows 上启动最新的 Jupyter QtConsole

Posted

技术标签:

【中文标题】如何在没有控制台窗口的情况下在 Windows 上启动最新的 Jupyter QtConsole【英文标题】:how to launch recent Jupyter QtConsole on Windows without a console window 【发布时间】:2019-02-17 05:42:12 【问题描述】:

This older question 似乎已过时。

过去(基于reading git repos 和the qtconsole issue tracker)您可以在没有控制台窗口运行后台的情况下启动 Jupyter QtConsole:

pythonw -m jupyter qtconsole

但是,在最新版本的 Jupyter 中,这仍会启动后台控制台窗口。

我想知道是否有人知道如何在没有烦人的控制台窗口的情况下启动 QtConsole。我知道您可以通过 Anaconda Navigator 程序执行此操作,但我不想启动一个程序,以便随后启动另一个程序。我希望有一个简单的批处理脚本甚至是 python 脚本,以便我可以使用开始菜单快捷方式启动

直接运行模块也不行:

pythonw -c "from qtconsole.qtconsoleapp import main; main()"

这仍然会启动一个新的控制台窗口,如图所示,所以我真的不知道这是否可以通过某种直接的方式实现,或者 Anaconda Navigator 是否正在使用一些黑魔法来实现这一点

【问题讨论】:

看来“C:\Miniconda3\Scripts\jupyter-qtconsole.exe”是一个控制台应用程序,如果不继承它会自动分配一个控制台,显然它不会继承来自 pythonw.exe。在该目录中查找非控制台版本。如果没有,您将需要一个适配器脚本,该脚本使用隐藏或无窗口控制台运行此命令。 您使用的是哪个版本?我没有看到 Py2.7 win64 + qtconsole 4.4.1 的问题 @ivan_pozdeev Python 3.6 和 Python 3.7 使用 Anaconda 发行版 【参考方案1】:

这里有两个问题:

%CONDA_PREFIX%\Scripts\jupyter-qtconsole.exe 标记为控制台可执行文件 (Subsystem field in PE optional header) -m ipykernel_launcher <etc> 子进程以 python.exe 启动,即使启动器以 pythonw 启动。 这个我可以追踪到%CONDA_PREFIX%\share\jupyter\kernels\python3\kernel.json。它使用可执行文件的完整路径,因此不会触发the logic in jupyter_client\manager.py that replaces certain patterns with sys.executable

这两种情况都是 Anaconda 特有的,不会发生在普通 Python 中。因此,向https://github.com/conda-forge/qtconsole-feedstock 提交错误以修复此问题。 p>

这些是解决方法:

对于第一个错误,运行 pythonw <Scripts_dir>\jupyter-qtconsole-script.py,这是 .exe 包装的脚本。 (这是 Anaconda 特有的。常规 Python 使用不同的包装机制。Anaconda 必须修补 setuptools 或其他东西。) 对于第二个,将上述kernel.json 中的完整路径替换为“python”。当您更新此文件所属的 ipykernel 包时,此更改将被覆盖(可以通过在 %CONDA_PREFIX%\pkgs 中搜索来检查)。

The OP reports that this solution may break other Anaconda packages。我相信那些打破标准流的可用性的假设。虽然它在我的书中也算作一个错误,但它一定是因为 Anaconda 软件包没有使用此设置进行测试。


要创建快捷方式/批处理文件以在 Anaconda Prompt 环境中运行上述命令,请参见例如How to make batch files run in anaconda prompt.

【讨论】:

该页面中的信息要么特定于他们的自定义 winpython 环境,要么完全过时。使用当前的 Anaconda 环境,这不起作用 @VinceW。我认为您将能够在一天左右的时间内获得赏金 :) @VinceW。实际上,在这里:***.com/questions/46305569/… 我已按要求提交了一个错误:github.com/conda-forge/qtconsole-feedstock/issues/15 @ivan_pozdeev,不知道是否值得回答,但我后来发现这可能会破坏其他应用程序。例如,JupyterLab 进入了一个无限的内核重启循环。耶!

以上是关于如何在没有控制台窗口的情况下在 Windows 上启动最新的 Jupyter QtConsole的主要内容,如果未能解决你的问题,请参考以下文章

在没有可见命令提示符窗口的情况下在 Windows 上自动启动 websocket 服务器

如何在不脱离控制台的情况下在 Windows 中的 Python 中执行 os.execv()?

如何在没有 Git Bash 或 GUI 的情况下在 Windows 10 上安装 git?

如何在python脚本中默认情况下在第二个TFT屏幕上运行套接字服务器控制台,而不是在主TFT屏幕上?

如何在没有状态栏重叠的情况下在 iOS7 上呈现视图控制器

在没有虚拟化的情况下在 Windows 上运行 Docker