Traceback after upgrading pip from to 8.1.0 to 8.1.1 when LC_*
environment variables are empty.
(env) root@cccf5e39dacc:/opt/project# locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
C.UTF-8
POSIX
(env) root@cccf5e39dacc:/opt/project# locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
(env) root@cccf5e39dacc:/opt/project# env | grep LC_
(env) root@cccf5e39dacc:/opt/project# pip install pip==8.1.0
Traceback (most recent call last):
File "/opt/project/env/bin/pip", line 11, in <module>
sys.exit(main())
File "/opt/project/env/local/lib/python2.7/site-packages/pip/__init__.py", line 215, in main
locale.setlocale(locale.LC_ALL, '')
File "/opt/project/env/lib/python2.7/locale.py", line 579, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale setting
(env) root@cccf5e39dacc:/opt/project# LC_ALL=C pip install pip==8.1.0
Downloading pip-8.1.0-py2.py3-none-any.whl (1.2MB)
UPD. I've added this lines into the my Dockerfile to fix locale settings:
# Set the locale
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
but traceback still looks like a regression in the pip
))
I encountered a similar problem, running on a computer cluster where I don't have admin rights (so can't run locale-gen trivially). I think the exception should be handled somehow, or pip becomes useless.
This is introduced by 5589ff286 and can be reproduced with:
$ LC_ALL=foo virtualenv/bin/pip list
Traceback (most recent call last):
File "virtualenv/bin/pip", line 11, in <module>
sys.exit(main())
File "virtualenv/local/lib/python2.7/site-packages/pip/__init__.py", line 215, in main
locale.setlocale(locale.LC_ALL, '')
File "virtualenv/lib/python2.7/locale.py", line 579, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale setting
Also, this is not restricted to docker.
@xavfernandez: Could you take a look at this?
I've got the same thing on my Raspberry Pi B
locale -a output:
C
C.UTF-8
en_GB.utf8
en_US.utf8
POSIX
I'm seeing this on OSX as well, so it is certainly not specific to docker. Interestingly setlocale(3) does document that the empty string is a valid: the empty string "" (which denotes the native environment)
, and this C code works fine:
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
char* old = setlocale(LC_ALL, "");
if (old==NULL) {
printf("Locale setting failed\n");
return 1;
}
return 0;
}
But doing the same thing in Python (both 2 and 3) fails:
Python 2.7.11 (default, Mar 31 2016, 15:25:28)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.29)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/wichert/.pbin/lib/python2.7/locale.py", line 579, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale setting
So possibly this is a Python bug that pip needs to work around.
definitely not a docker issue. eg also causing trouble in fresh ubuntu images used with vagrant when locale is not configured on initial provisioning run.
Does #3598 fixes it ?
Yes, thanks!
Can we please get a pip release with this fix?
Most helpful comment
Can we please get a pip release with this fix?