1

i'm using python 2.7 on a windows 10. iv'e tried to install openpyxl using "pip install openpyxl" and iv'e got an trace of errors, ending in "UnicodeDecodeError: 'ascii' codec can't decode byte". I searched this site for solutions, and i tried to upgrade pip, as suggested in one of them. When i typed "pip install --upgrade pip" i got the same error (i pasted the error trace below).

C:\Users\Gal>pip install --upgrade pip
Exception:
Traceback (most recent call last):
  File "c:\python27\lib\site-packages\pip\basecommand.py", line 215, in main
    status = self.run(options, args)
  File "c:\python27\lib\site-packages\pip\commands\install.py", line 299, in     
run
    requirement_set.prepare_files(finder)
  File "c:\python27\lib\site-packages\pip\req\req_set.py", line 370, in   
prepare_files
    ignore_dependencies=self.ignore_dependencies))
  File "c:\python27\lib\site-packages\pip\req\req_set.py", line 458, in     
_prepare_file
    req_to_install, finder)
  File "c:\python27\lib\site-packages\pip\req\req_set.py", line 407, in     
_check_skip_installed
    finder.find_requirement(req_to_install, self.upgrade)
  File "c:\python27\lib\site-packages\pip\index.py", line 442, in     
find_requirement
    all_candidates = self.find_all_candidates(req.name)
  File "c:\python27\lib\site-packages\pip\index.py", line 400, in    
find_all_candidates
    for page in self._get_pages(url_locations, project_name):
  File "c:\python27\lib\site-packages\pip\index.py", line 545, in _get_pages
    page = self._get_page(location)
  File "c:\python27\lib\site-packages\pip\index.py", line 648, in _get_page
    return HTMLPage.get_page(link, session=self.session)
  File "c:\python27\lib\site-packages\pip\index.py", line 757, in get_page
    "Cache-Control": "max-age=600",
  File "c:\python27\lib\site-packages\pip\_vendor\requests\sessions.py",     
line 487, in get
    return self.request('GET', url, **kwargs)
  File "c:\python27\lib\site-packages\pip\download.py", line 378, in request
    return super(PipSession, self).request(method, url, *args, **kwargs)
  File "c:\python27\lib\site-packages\pip\_vendor\requests\sessions.py",     
line 475, in request
    resp = self.send(prep, **send_kwargs)
  File "c:\python27\lib\site-packages\pip\_vendor\requests\sessions.py",    
line 617, in send
    r.content
  File "c:\python27\lib\site-packages\pip\_vendor\requests\models.py", line  
741, in content
    self._content = bytes().join(self.iter_content(CONTENT_CHUNK_SIZE)) or   
bytes()
  File "c:\python27\lib\site-packages\pip\_vendor\requests\models.py", line   
664, in generate
    for chunk in self.raw.stream(chunk_size, decode_content=True):
  File "c:\python27\lib\site-  
packages\pip\_vendor\requests\packages\urllib3\response.py", line 353, in   
stream
    data = self.read(amt=amt, decode_content=decode_content)
  File "c:\python27\lib\site-  
packages\pip\_vendor\requests\packages\urllib3\response.py", line 310, in     
read
    data = self._fp.read(amt)
  File "c:\python27\lib\site-    
packages\pip\_vendor\cachecontrol\filewrapper.py", line 54, in read
    self.__callback(self.__buf.getvalue())
  File "c:\python27\lib\site-  
packages\pip\_vendor\cachecontrol\controller.py", line 297, in   
cache_response
    self.serializer.dumps(request, response, body=body),
  File "c:\python27\lib\site-packages\pip\download.py", line 281, in set
    return super(SafeFileCache, self).set(*args, **kwargs)
  File "c:\python27\lib\site- 
packages\pip\_vendor\cachecontrol\caches\file_cache.py", line 99, in set
    with self.lock_class(name) as lock:
  File "c:\python27\lib\site- 
packages\pip\_vendor\lockfile\mkdirlockfile.py", line 19, in __init__
    LockBase.__init__(self, path, threaded, timeout)
  File "c:\python27\lib\site-packages\pip\_vendor\lockfile\__init__.py",  
line 242, in __init__
    hash(self.path)))
  File "c:\python27\lib\ntpath.py", line 85, in join
    result_path = result_path + p_path
UnicodeDecodeError: 'ascii' codec can't decode byte 0xee in position 0:   
ordinal not in range(128)

How can i solve this problem?

2
  • Try a work-around: easy_install --upgrade pip to see if it works Commented Nov 21, 2016 at 20:23
  • It may not help with this encoding problem, but upgrading pip will require you to run python -m pip install --upgrade pip. Otherwise you'll run into an error trying to remove pip.exe. Commented Nov 21, 2016 at 23:29

3 Answers 3

1

The answer above mine (the answer of Gal Avineri) was almost correct. You should go to the ntpath file and change the line.

result_path = result_path + p_path

to the line,

result_path = result_path + p_path.decode('latin1')
Sign up to request clarification or add additional context in comments.

Comments

0

Above answers gave me the right clue but neither solution worked for me. Turns out I had the issue due to an 'å' in my username in windows.

I solved it by changing the line to:

result_path = result_path + p_path.encode('utf-8')

Comments

0

The last error came from ntpath, while it was trying to decode a byte using ascii. That meant that either result_path or p_path is a string that was encoded by something that isn't ascii.

Querying their types resulted in result_path being unicode and p_path being string. And indeed after examining the value of p_path I recognized it was encoded in latin1.

So replacing the line:

result_path = result_path + p_path

to the line:

result_path = result_path + decode(p_path,'latin1')

solves the issue.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.