Closed
Description
Bug report
Bug description:
When using new Python 3.13 pyrepl
on a read-only file system, attempting to exit the REPL raises the following exception: OSError: [Errno 30] Read-only file system: '/root/.python_history'
. The same setup works with Python 3.12.
dev:/home/dev$ docker run -it --read-only python:3.12-slim-bookworm python3
Python 3.12.7 (main, Nov 12 2024, 02:26:49) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('hello')
hello
>>> exit()
dev:/home/dev$ docker run -it --read-only python:3.13-slim-bookworm python3
Python 3.13.1 (main, Dec 4 2024, 20:40:24) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('hello')
hello
>>> exit()
Exception ignored in atexit callback <function register_readline.<locals>.write_history at 0x7f56689a3600>:
Traceback (most recent call last):
File "<frozen site>", line 574, in write_history
File "/usr/local/lib/python3.13/_pyrepl/readline.py", line 453, in write_history_file
f = open(os.path.expanduser(filename), "w",
OSError: [Errno 30] Read-only file system: '/root/.python_history'
CPython versions tested on:
3.12, 3.13
Operating systems tested on:
Linux
Linked PRs
- gh-128066: Fixed PyREPL history saving on read-only file systems #128088
- gh-128066: Properly handle history file writes for RO fs on PyREPL #134380
- [3.14] gh-128066: Properly handle history file writes for RO fs on PyREPL (gh-134380) #134385
- [3.13] gh-128066: Properly handle history file writes for RO fs on PyREPL (gh-134380) #134386
Activity
ZeroIntensity commentedon Dec 18, 2024
I think the easiest fix would be to catch
OSError
s there, and just log a warning if something goes wrong.skirpichev commentedon Dec 20, 2024
It's silly that we get this error only at the end of session.
Rather than catch OSError, maybe we should map EROFS errno to PermissionError on Linux. (Call to write_history_file() is wrapped with
except (FileNotFoundError, PermissionError)
.)Prevent issues like python#128066
feoh commentedon May 20, 2025
Fix in hand. Tested locally by stealing the official Python image build dockerfile but using my own modified tarball with the fix.
gh-128066: Properly handle history file writes for RO fs on PyREPL (g…
pythongh-128066: Properly handle history file writes for RO fs on PyR…
[3.13] pythongh-128066: Properly handle history file writes for RO fs…
4 remaining items