Line 64: | Line 64: | ||
When run under the C locale, Python 3 doesn't work properly on systems where UTF-8 is the correct encoding for interacting with the rest of the system. | When run under the C locale, Python 3 doesn't work properly on systems where UTF-8 is the correct encoding for interacting with the rest of the system. | ||
This is described in detail by Armin Ronacher in the click documentation: http://click.pocoo.org/5/python3/#python-3-surrogate-handling | This is described in detail by Armin Ronacher in the click documentation: http://click.pocoo.org/5/python3/#python-3-surrogate-handling | ||
This proposed change for the system Python 3 that assumes the current process is misconfigured when it detects that "LC_CTYPE" refers to the "C" locale, and in that case, prints a warnings to stderr and forces the use of the C.UTF-8 locale instead. | This proposed change for the system Python 3 that assumes the current process is misconfigured when it detects that "LC_CTYPE" refers to the "C" locale, and in that case, prints a warnings to stderr and forces the use of the C.UTF-8 locale instead. | ||
Line 73: | Line 75: | ||
Behaviour with the patch: | Behaviour with the patch: | ||
$ LANG=C python -c 'import click; cli = click.command()(lambda:None); cli()' | $ LANG=C python -c 'import click; cli = click.command()(lambda:None); cli()' | ||
Python detected LC_CTYPE=C. Setting LC_ALL & LANG to C.UTF-8. | Python detected LC_CTYPE=C. Setting LC_ALL & LANG to C.UTF-8. | ||
Behaviour without the patch: | Behaviour without the patch: | ||
$ LANG=C /usr/bin/python3 -c 'import click; cli = click.command()(lambda:None); cli()' | $ LANG=C /usr/bin/python3 -c 'import click; cli = click.command()(lambda:None); cli()' | ||
Traceback (most recent call last): | Traceback (most recent call last): | ||
File "<string>", line 1, in <module> | File "<string>", line 1, in <module> | ||
Line 91: | Line 92: | ||
'mitigation steps.' + extra) | 'mitigation steps.' + extra) | ||
RuntimeError: Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment. Either run this under Python 2 or consult http://click.pocoo.org/python3/ for mitigation steps. | RuntimeError: Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment. Either run this under Python 2 or consult http://click.pocoo.org/python3/ for mitigation steps. | ||
This system supports the C.UTF-8 locale which is recommended. | This system supports the C.UTF-8 locale which is recommended. | ||
Line 97: | Line 97: | ||
following environment variables: | following environment variables: | ||
export LC_ALL=C.UTF-8 | |||
export LANG=C.UTF-8 | |||
== Benefit to Fedora == | == Benefit to Fedora == |
Revision as of 10:34, 14 February 2017
Change Proposal Name
Summary
Force C.UTF-8 when Python 3 is run under the C locale
Owner
- Name: Charalampos Stratakis
- Name: Nick Coghlan
- Email: cstratak AT redhat.com
- Email: ncoghlan AT redhat.com
- Release notes owner:
Current status
- Targeted release: Fedora 26
- Last updated: 2017-02-14
- Tracker bug: <will be assigned by the Wrangler>
Detailed Description
When run under the C locale, Python 3 doesn't work properly on systems where UTF-8 is the correct encoding for interacting with the rest of the system.
This is described in detail by Armin Ronacher in the click documentation: http://click.pocoo.org/5/python3/#python-3-surrogate-handling
This proposed change for the system Python 3 that assumes the current process is misconfigured when it detects that "LC_CTYPE" refers to the "C" locale, and in that case, prints a warnings to stderr and forces the use of the C.UTF-8 locale instead.
To avoid unintended side effects, it *solely* changes the actual python3.6 command line utility - nothing changes for cases where CPython is used as a dynamically linked library.
Behaviour with the patch:
$ LANG=C python -c 'import click; cli = click.command()(lambda:None); cli()'
Python detected LC_CTYPE=C. Setting LC_ALL & LANG to C.UTF-8.
Behaviour without the patch:
$ LANG=C /usr/bin/python3 -c 'import click; cli = click.command()(lambda:None); cli()'
Traceback (most recent call last):
File "<string>", line 1, in <module> File "/home/ncoghlan/.local/lib/python3.5/site-packages/click/core.py", line 716, in __call__ return self.main(*args, **kwargs) File "/home/ncoghlan/.local/lib/python3.5/site-packages/click/core.py", line 675, in main _verify_python3_env() File "/home/ncoghlan/.local/lib/python3.5/site-packages/click/_unicodefun.py", line 119, in _verify_python3_env 'mitigation steps.' + extra)
RuntimeError: Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment. Either run this under Python 2 or consult http://click.pocoo.org/python3/ for mitigation steps.
This system supports the C.UTF-8 locale which is recommended. You might be able to resolve your issue by exporting the following environment variables:
export LC_ALL=C.UTF-8 export LANG=C.UTF-8
Benefit to Fedora
Scope
- Proposal owners:
- Other developers: N/A (not a System Wide Change)
- Release engineering: #Releng issue number (a check of an impact with Release Engeneering is needed)
- List of deliverables: N/A (not a System Wide Change)
- Policies and guidelines: N/A (not a System Wide Change)
- Trademark approval: N/A (not needed for this Change)
Upgrade/compatibility impact
N/A (not a System Wide Change)
How To Test
N/A (not a System Wide Change)
User Experience
N/A (not a System Wide Change)
Dependencies
N/A (not a System Wide Change)
Contingency Plan
- Contingency mechanism: (What to do? Who will do it?) N/A (not a System Wide Change)
- Contingency deadline: N/A (not a System Wide Change)
- Blocks release? N/A (not a System Wide Change), Yes/No
- Blocks product? product
Documentation
N/A (not a System Wide Change)