A Flake8 plugin to identify incorrect use of encodings.
Docs | |
---|---|
Tests | |
PyPI | |
Anaconda | |
Activity | |
QA | |
Other |
flake8-encodings
can be installed from PyPI or Anaconda.
To install with pip
:
$ python -m pip install flake8-encodings
To install with conda
:
- First add the required channels
$ conda config --add channels http://conda.anaconda.org/conda-forge $ conda config --add channels http://conda.anaconda.org/domdfcoding
- Then install
$ conda install flake8-encodings
Developers using macOS or Linux may forget that the default encoding is not always UTF-8.
For example, long_description = open("README.md").read()
in
setup.py
is a common mistake. Many Windows users cannot install
the package if there is at least one non-ASCII character (e.g. emoji)
in the README.md
file which is encoded in UTF-8.
For example, 489 packages of the 4000 most downloaded packages from PyPI used non-ASCII characters in README. And 82 packages of them cannot be installed from source package when the locale encoding is ASCII. [1] They used the default encoding to read README or TOML file.
Even Python expe 8929 rts assume that default encoding is UTF-8. It creates bugs that happen only on Windows. See [2], [3], [4], and [5] for example.
PEP 597 proposed adding a new EncodingWarning
to Python,
which can be used in conjunction with this tool to identify issues at runtime.
[1] | "Packages can't be installed when encoding is not UTF-8" (https://github.com/methane/pep597-pypi-ascii) |
[2] | Packaging tutorial in packaging.python.org didn't specify
encoding to read a README.md
(pypa/packaging.python.org#682) |
[3] | json.tool had used locale encoding to read JSON files.
(https://bugs.python.org/issue33684) |
[4] | site: Potential UnicodeDecodeError when handling pth file (https://bugs.python.org/issue33684) |
[5] | pypa/pip: "Installing packages fails if Python 3 installed into path with non-ASCII characters" (pypa/pip#9054) |