2016-04-04 1 views
3

Я создаю приложение python 3. https://github.com/Omrigan/TED-analysisЗагадочный UnicodeDecodeError в python3 при построении контейнера Docker

Для развертывания я хочу использовать Docker с файлом Docker, расположенным в корне моего репозитория Github (вы можете его проверить). Итак, когда я делаю сборку докеров. Я получаю ошибку на этой линии:

RUN pip3 install --upgrade -r /root/ted_talks/requirements.txt 

Вход с консоли:

Collecting httpretty==0.8.10 (from smart-open>=1.2.1->gensim->-r /root/ted_talks/requirements.txt (line 4)) 
    Downloading httpretty-0.8.10.tar.gz (41kB) 
    Complete output from command python setup.py egg_info: 
    Traceback (most recent call last): 
     File "<string>", line 1, in <module> 
     File "/tmp/pip-build-em459e9u/httpretty/setup.py", line 86, in <module> 
     version=read_version(), 
     File "/tmp/pip-build-em459e9u/httpretty/setup.py", line 46, in read_version 
     finder.visit(ast.parse(local_file('httpretty', '__init__.py'))) 
     File "/tmp/pip-build-em459e9u/httpretty/setup.py", line 78, in <lambda> 
     open(os.path.join(os.path.dirname(__file__), *f)).read() 
     File "/usr/lib/python3.4/encodings/ascii.py", line 26, in decode 
     return codecs.ascii_decode(input, self.errors)[0] 
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 133: ordinal not in range(128) 

Итак, что я должен делать?

+1

ваш Dockerfile должен иметь дело с локалью, см http://jaredmarkell.com/docker-and-locales/ и предпочтительно использовать вариант UTF-8 – user2915097

ответ

0

Кажется, что httpretty делает некоторые напуганные вещи, чтобы найти его номер версии. Он открывает один из исходных файлов, который содержит символы не-ascii, без объявления кодировки. В Python 3 это будет использовать ваш язык, который в вашем случае, кажется, поврежден или установлен на LANG=C|POSIX.

У вас есть следующие варианты:

  1. Скачать httpretty-0.8.10, редактировать httpretty/__init__.py и удалить не-ASCII символов (ã).
  2. Установите свой язык на en_US.UTF-8
  3. Я вижу, что httpretty 0.8.14 имеет ссылки на совместимость с Python 3. Попробуйте установить:

    pip3 install httpretty==0.8.14 
    
+1

Похоже, что ошибка в 'httpretty': кодировка исходных файлов Python не имеет ничего общего с локалью, и поэтому встроенная функция' open() ', которая по умолчанию использует кодировку локали, представляет собой неправильный способ чтения исходного кода Python. Файлы Python 3 - это либо utf-8, либо явное объявление кодировки (например, '# - * - кодирование: utf-8 - * -'). 'tokenize.open()' может использоваться, чтобы декодировать исходный код в Unicode. – jfs

0

У меня была такая же проблема. Причина была в том, что локаль моего выбора (то есть en_US.utf8) не была установлена. Установка этой локали решает мою проблему.

Чтобы установить локаль:

locale-gen en_US.utf8 
dpkg-reconfigure locales 

и выберите en_US.utf8 в качестве локали по умолчанию

Смежные вопросы