Spyder窗口布局文件的位置



我在 Ubuntu 和 Arch 上都通过sudo pip3 install spyder安装了 spyder,因为 pacakage 管理的版本并不像我想要的那么新。到目前为止,我注意到的唯一问题是我的窗格布局没有被保存。例如:我关闭了变量资源管理器和绘图窗口,但下次打开应用程序时它们会恢复。

我强烈怀疑这是配置文件的权限问题,但我不知道该文件位于何处。为了避免X-Y问题,我发布了背景材料,但我的主要问题是,spyder将其窗口和窗格布局存储在哪里?

我从命令行运行spyder --reset并得到以下输出:

*** Reset Spyder settings to defaults ***
removing: /home/madphysicist/.config/spyder-py3/help
removing: /home/madphysicist/.config/spyder-py3/onlinehelp
removing: /home/madphysicist/.config/spyder-py3/spyder.ini
removing: /home/madphysicist/.config/spyder-py3/temp.py
removing: /home/madphysicist/.config/spyder-py3/template.py
removing: /home/madphysicist/.config/spyder-py3/history.py
removing: /home/madphysicist/.config/spyder-py3/history_internal.py
removing: /home/madphysicist/.config/spyder-py3/workingdir
removing: /home/madphysicist/.config/spyder-py3/.ropeproject
removing: /home/madphysicist/.config/spyder-py3/langconfig
removing: /home/madphysicist/.config/spyder-py3/spyder.lock
removing: /home/madphysicist/.config/spyder-py3/config/spyder.ini
removing: /home/madphysicist/.config/spyder-py3/config/transient.ini
removing: /home/madphysicist/.config/spyder-py3/plugins

目录/home/madphysicist/.config/spyder-py3/madphysicist所有,其所有内容也是如此。

当我运行spyder --debug verbose(minimal什么都不做)时,我看到编辑布局时弹出的一行:

2022-03-22 13:09:19,767 [DEBUG] [urllib3.connectionpool] -> Starting new HTTP connection (8): 127.0.0.1:46624

日志的最后几行,关于关闭,可能会提供一个提示,因为它看起来可能与此问题相关的内容在会话关闭时失败:

2022-03-22 13:10:04,661 [DEBUG] [spyder.api.plugin_registration.registry] -> Notifying plugin layout that internal_console is going to be turned off
2022-03-22 13:10:04,662 [DEBUG] [spyder.api.widgets.main_widget] -> Docking plugin back to the main window
2022-03-22 13:10:04,662 [DEBUG] [spyder.api.plugin_registration.registry] -> Notifying plugin layout that statusbar is going to be turned off
2022-03-22 13:10:04,662 [DEBUG] [spyder.api.plugin_registration.registry] -> Notifying plugin layout that shortcuts is going to be turned off
2022-03-22 13:10:04,662 [DEBUG] [spyder.api.plugin_registration.registry] -> Notifying plugin layout that appearance is going to be turned off
2022-03-22 13:10:04,662 [DEBUG] [spyder.api.plugin_registration.registry] -> Notifying plugin layout that explorer is going to be turned off
2022-03-22 13:10:04,663 [DEBUG] [spyder.api.widgets.main_widget] -> Docking plugin back to the main window
2022-03-22 13:10:04,663 [DEBUG] [spyder.api.plugin_registration.registry] -> Notifying plugin layout that outline_explorer is going to be turned off
2022-03-22 13:10:04,663 [DEBUG] [spyder.api.widgets.main_widget] -> Docking plugin back to the main window
2022-03-22 13:10:04,666 [DEBUG] [spyder.api.plugin_registration.registry] -> Disconnecting layout from layout
2022-03-22 13:10:04,667 [DEBUG] [spyder.api.plugin_registration.registry] -> Notifying plugin layout that layout is going to be turned off
2022-03-22 13:10:04,730 [DEBUG] [traitlets] -> shutdown: {}
2022-03-22 13:10:04,730 [DEBUG] [traitlets] -> stream: {'name': 'stderr', 'text': 'Exception in thread Thread-4:nTraceback (most recent call last):n  File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_innern    self.run()n  File "/usr/lib/python3.6/threading.py", line 864, in runn    self._target(*self._args, **self._kwargs)n  File "/usr/local/lib/python3.6/dist-packages/spyder_kernels/comms/frontendcomm.py", line 124, in poll_threadn    self.poll_one()n  File "/usr/local/lib/python3.6/dist-packages/spyder_kernels/comms/frontendcomm.py", line 144, in poll_onen    self._comm_close(msg)n  File "/usr/local/lib/python3.6/dist-packages/spyder_kernels/comms/frontendcomm.py", line 241, in _comm_closen    self.close(comm_id)n  File "/usr/local/lib/python3.6/dist-packages/spyder_kernels/comms/frontendcomm.py", line 104, in closen    return super(FrontendComm, self).close(comm_id)n  File "/usr/local/lib/python3.6/dist-packages/spyder_kernels/comms/commbase.py", line 173, in closen    self._comms[comm_id]['comm'].close()nKeyError: '1c5154b8aa0b11eca3b16c946661f1ca'nn'}
2022-03-22 13:10:04,732 [DEBUG] [spyder.plugins.ipythonconsole.comms.kernelcomm] -> Dropping interrupt because comm is disconnected: {'call_name': 'set_namespace_view_settings', 'call_id': 'd49cbdd2291142ed8ff80e500890025b', 'settings': {'interrupt': True, 'blocking': False, 'timeout': None, 'display_error': False, 'send_reply': False}}

更新

当我在 venv 中本地安装 spyder 时,也会发生同样的问题。首先,我确保它没有安装在我的系统上的任何地方,pipapt。然后我运行以下内容:

$ sudo apt install python3-venv
$ mkdir -p ~/.venv
$ python3 -m venv ~/.venv/spyder-test
$ source ~/.venv/spyder-test/bin/activate
$ pip install spyder
$ echo '[Desktop Entry]
Version=1.0
Type=Application
Name=Spyder
GenericName=Spyder
Comment=Scientific PYthon Development EnviRonment - Python3
Icon=/home/madphysicist/.venv/spyder-test/share/icons/spyder.png
TryExec=/home/madphysicist/.venv/spyder-test/bin/spyder
Exec=/home/madphysicist/.venv/spyder-test/bin/spyder %F
Categories=Development;Science;IDE;Qt;
Terminal=false
StartupNotify=true
MimeType=text/x-python;' > ~/.local/share/applications/spyder.desktop
$ update-desktop-database ~/.local/share/applications

这将安装 spyder 并在应用程序菜单中为其创建一个图标。我能够通过图标或命令行很好地启动spyder。任何重新打开的尝试都会重置部分(但不是全部)窗口布局。基本窗格布局将更改。但是,以下两项似乎已重置:

">
  1. 新Spyder版本"对话框中的"启动时检查更新"复选框
  2. "帮助"窗格不会关闭。如果我移动它,它的布局会正确保存。但是,当我重新启动 spyder 时,该窗格始终处于打开状态,即使我通过栏或"视图>窗格"菜单将其关闭也是如此。

似乎某些布局数据未正确保存。

在我的 Ubuntu 20.04 LTS 系统上,至少有一些窗口布局设置存储在文件~/.config/spyder-py3/config/transient.ini中。在第[quick_layouts]部分下有一些相关的变量。

我在Spyder版本5.2.2和5.3.0中遇到了类似的问题,在仅使用conda-forge包的环境中,通过condaconda-forge通道安装。我在安装中没有使用sudopip。另请参阅此 github 问题。

除了对窗口布局所做的更改在后续启动时不会被记住之外,预定义的窗口布局选项(RStudio、Matlab、垂直拆分、水平拆分)和我以前手动定义的布局在View->Window layouts菜单中不可用。layout preferences选项灰显,Use next layoutUse previous layout选项均不执行任何操作。不过,我想我已经找到了解决方法。

我注意到在打开一个新的Spyder 5.3.0窗口后,transient.ini文件[quick_layouts]部分中的以下变量设置为等于空列表:namesorderactiveui_names。使用 Spyder 版本 5.1.5 或 5.1.1 时不会发生这种情况,其中列表包含布局选项名称的字符串。空列表似乎是上述行为的原因,因为可以通过将备份文件中的旧列表值粘贴到当前transient.ini文件中来临时还原窗格。作为解决方法,在Spyder v5.3.0窗口中,从View->Window layouts中选择Save current layout并关闭Spyder。随后,在打开新的Spyder实例时,应记住您的窗口布局。

通过sudo pip3 ...安装软件包可能是这些问题的原因。也许尝试创建一个虚拟环境并在环境处于活动状态的情况下安装 spyder?

我目前在Windows机器上,所以目前无法仔细检查实际的Linux安装。不过,这里有一些地方需要检查:

  • 在 Linux 上,conf 子文件夹应该是spyder
  • 如果您运行的是 Python 3,并且看起来像您的 Python 3,则默认情况下文件夹名称将为spyder-py3
  • 如果您正在运行开发版本,我认为您不是,但以防万一,默认文件夹名称将spyder-py3-dev

配置文件夹设置为相对于主目录。配置文件也可能存储在:

'/etc/spyder'
'/usr/local/etc/spyder'

如果您使用的是Anaconda,它将使跟踪文件夹变得更加棘手,因为Spyder可能包含相对于环境变量CONDA_PREFIX的配置文件。

如果这些位置都不包含您要查找的内容,请检查文件spider.config.base的Spyder源代码,并查看它尝试读取/写入配置文件的位置。

安装 spyder(通过 pip)时,看起来它会在/home/<user>/.config/spyder-py3/处为用户添加配置文件

我想通过sudo pip3安装,配置存储在需要root权限才能写入的文件夹中。所以这可能就是配置没有被保存的原因。

更新:对我来说(安装时没有sudo),似乎是布局配置的内容保存在:

/home/<user>/.config/spyder-py3/config/transient.ini

您也许可以在文件系统中搜索并检查权限。

最新更新