You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
PyREPL raises exception while trying to write to the history file on a read-only file system #128066
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'
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).)
Fix in hand. Tested locally by stealing the official Python image build dockerfile but using my own modified tarball with the fix.
╭─cpatti at rocinante in ~/src/personal 25-05-20 - 14:18:58
╰─○ docker run -it --read-only pyrepl_tst python3 <region:us-east-1>
zsh: correct 'python3' to 'python' [nyae]? n
Python 3.15.0a0 (heads/cpatti_issue_128066-dirty:01225ff4a74, May 20 2025, 18:17:11) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hellorld!")
Hellorld!
>>>
Activity
ZeroIntensity commentedon Dec 18, 2024
I think the easiest fix would be to catch
OSErrors 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…
[3.14] gh-128066: Properly handle history file writes for RO fs on Py…
[3.13] gh-128066: Properly handle history file writes for RO fs on Py…
pythongh-128066: Properly handle history file writes for RO fs on PyR…
pythongh-128066: Properly handle history file writes for RO fs on PyR…
pythongh-128066: Properly handle history file writes for RO fs on PyR…
pythongh-128066: Properly handle history file writes for RO fs on PyR…