Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions Lib/venv/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -303,8 +303,11 @@ def setup_python(self, context):
copier(context.executable, path)
if not os.path.islink(path):
os.chmod(path, 0o755)
for suffix in ('python', 'python3',
f'python3.{sys.version_info[1]}'):

suffixes = ['python', 'python3', f'python3.{sys.version_info[1]}']
if sys.version_info[:2] == (3, 14):
suffixes.append('pythonπ')
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think using python-pi or python_pi would be better. I think using special characters may cause garbled characters on some platform.

Copy link
Contributor Author

@hauntsaninja hauntsaninja Oct 5, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, what platform / filesystem are you concerned about, and what would the impact to the user on that platform be? (note in this branch we know os.name == "posix")

A Greek letter isn't really that special. It's fully normalised Unicode (non-normalised Unicode can still be a little surprising). Looks like even FAT has supported this since around the time I was born via LFN.

See also https://peps.python.org/pep-0011/#legacy-c-locale part of PEP 11

This is decidedly one of the advantages of being alive in 2024 :-)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Linux console with no framebuffer?

Console fonts without this glyph? I sometimes do math with the Diofant in the framebuffer console (yes, it has unicode support). I works well with greek letters, do some pretty-printing to display formulas. But I doubt it's able to display e.g. chinese texts an non-garbadge. (Perhaps, with other font, which I don't have...)

Copy link
Contributor Author

@hauntsaninja hauntsaninja Oct 5, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IIUC https://wiki.archlinux.org/title/Linux_console says that the Linux console uses UTF-8, but we may indeed have to worry about whether the console font is missing π. The same page says the kernel built-in font can render the CP437 character set, which does have π (and dates back to the original IBM PC).

It's possible I misunderstood something, but even the case where the font is missing the glyph, is the worst thing that can happen that a user will see an unrendered glyph if ls-ing? That doesn't seem that bad, and sounds in line with the vibes of what PEP 11 describes as "won't fix". (And of course, if users report problems during prerelease we can revert)

Edit: note the CP437 stuff probably doesn't apply to U+1d70b which the PR has been updated to use. It might also have worse font support

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Terminals cope with missing glyphs already (usually by rendering an ASCII ?, or a dedicated replacement character).

If the active encoding is sufficiently wrong, they don't even see the raw unicode:

$ ls -d _[bd]*
_build🐸  _deploy🐸
$ LANG=C ls -d _[bd]*
'_build'$'\360\237\220\270'  '_deploy'$'\360\237\220\270'

So yeah, as far as easter eggs go, this one is as close to genuinely harmless as they get.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From @ambv , this should use the mathematical symbol variant of 𝜋, rather than the Greek letter variant:

Suggested change
suffixes.append('pythonπ')
suffixes.append('python𝜋')

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@hauntsaninja Let's include this, remove the NEWS, and keep the version check. Thanks!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, I've made the updates!

(Note that U+1d70b isn't NFKC normalised. I know in some cases non-normalised Unicode can cause issues in filesystems, but I think that's usually about NFC/NFD normalisation)

for suffix in suffixes:
path = os.path.join(binpath, suffix)
if not os.path.exists(path):
# Issue 18807: make copies if
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
On Python 3.14, :mod:`venv` creates an additional ``pythonπ`` symlink on non-Windows systems