先交待下开发环境:

操作系统:Windows 7

Python版本:2.7.9

Pip版本:6.1.1

其他环境忽略

在windows下使用pip下载python包,出现如下错误

  1. Collecting xxxxxx
  2. Exception:
  3. Traceback (most recent call last):
  4. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\basecommand.py", line 232, in main
  5. status = self.run(options, args)
  6. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\commands\install.py", line 339, in run
  7. requirement_set.prepare_files(finder)
  8. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\req\req_set.py", line 333, in prepare_files
  9. upgrade=self.upgrade,
  10. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\index.py", line 305, in find_requirement
  11. page = self._get_page(main_index_url, req)
  12. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\index.py", line 783, in _get_page
  13. return HTMLPage.get_page(link, req, session=self.session)
  14. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\index.py", line 872, in get_page
  15. "Cache-Control": "max-age=600",
  16. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\requests\sessions.py", line 473, in get
  17. return self.request('GET', url, **kwargs)
  18. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\download.py", line 365, in request
  19. return super(PipSession, self).request(method, url, *args, **kwargs)
  20. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\requests\sessions.py", line 461, in request
  21. resp = self.send(prep, **send_kwargs)
  22. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\requests\sessions.py", line 610, in send
  23. r.content
  24. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\requests\models.py", line 730, in content
  25. self._content = bytes().join(self.iter_content(CONTENT_CHUNK_SIZE)) or bytes()
  26. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\requests\models.py", line 655, in generate
  27. for chunk in self.raw.stream(chunk_size, decode_content=True):
  28. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\requests\packages\urllib3\response.py", line 256, in stream
  29. data = self.read(amt=amt, decode_content=decode_content)
  30. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\requests\packages\urllib3\response.py", line 186, in read
  31. data = self._fp.read(amt)
  32. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\cachecontrol\filewrapper.py", line 54, in read
  33. self.__callback(self.__buf.getvalue())
  34. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\cachecontrol\controller.py", line 217, in cache_response
  35. self.serializer.dumps(request, response, body=body),
  36. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\download.py", line 268, in set
  37. return super(SafeFileCache, self).set(*args, **kwargs)
  38. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\cachecontrol\caches\file_cache.py", line 83, in set
  39. with FileLock(name) as lock:
  40. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\lockfile\mkdirlockfile.py", line 18, in __init__
  41. LockBase.__init__(self, path, threaded, timeout)
  42. File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\lockfile\__init__.py", line 189, in __init__
  43. hash(self.path)))
  44. File "D:\Python27\lib\ntpath.py", line 84, in join
  45. result_path = result_path + p_path
  46. UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0: ordinal not in range(128)

'UnicodeDecodeError'这个词已经暴露了这个问题是个编码问题

什么原因导致了这样的问题?在我的电脑上出现这个问题的原因是由于我的用户目录是中文的,pip在下载的时候调用了这样一行代码

  1. temp_dir = tempfile.mkdtemp('-unpack', 'pip-')

pip把下载的临时文件存放在了用户临时文件中,这个目录一般是C:\Users\用户名\AppData\Local\Temp,目录名中有中文,显然ascii这种编码是不支持的

那问题要怎么解决呢?有两种方法解决:

1、把上面的temp_dir那段代码修改一个不包含中文的目录,修改这段代码的文件位置在D:\Python27\Lib\site-packages\pip-6.1.1-py2.7.egg\pip\download.py(位置由个人python安装目录决定)

2、修改编码为gbk,修改D:\Python27\Lib\ntpath.py(位置由个人python安装目录决定)文件中的def join(path, *paths)函数,在函数内第一行加入

  1. # Join two (or more) paths.
  2. def join(path, *paths):
  3. """Join two or more pathname components, inserting "\\" as needed."""
  4. reload(sys)
  5. sys.setdefaultencoding('gbk')
  6. result_drive, result_path = splitdrive(path)
  7. for p in paths:
  8. p_drive, p_path = splitdrive(p)
  9. if p_path and p_path[0] in '\\/':
  10. # Second path is absolute
  11. if p_drive or not result_drive:
  12. result_drive = p_drive
  13. result_path = p_path
  14. continue
  15. elif p_drive and p_drive != result_drive:
  16. if p_drive.lower() != result_drive.lower():
  17. # Different drives => ignore the first path entirely
  18. result_drive = p_drive
  19. result_path = p_path
  20. continue
  21. # Same drive in different case
  22. result_drive = p_drive
  23. # Second path is relative to the first
  24. if result_path and result_path[-1] not in '\\/':
  25. result_path = result_path + '\\'
  26. result_path = result_path + p_path
  27. ## add separator between UNC and non-absolute path
  28. if (result_path and result_path[0] not in '\\/' and
  29. result_drive and result_drive[-1:] != ':'):
  30. return result_drive + sep + result_path
  31. return result_drive + result_path

注意:

  1. reload(sys)
  2. sys.setdefaultencoding('gbk')

这两行代码是我后加入的

一切准备就绪,重新执行pip安装试试吧

总结:

1、据说python3的默认编码为'utf-8',可能不存在这种问题,没有实际测试

2、这次我直接修改了python和pip中的源码,体现了python是脚本语言的特性

Windows下使用pip安装python包是报错-UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0的更多相关文章

  1. Python报错“UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)”的解决办法

    最近在用Python处理中文字符串时,报出了如下错误: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ...

  2. python报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 0 解决方案

    环境:mac+python 2.7 场景描述:在使用python修改excel内容修改表格内容为中文保存时报以下错误 此时已经设置了utf-8了 但保存时仍然报错错 此时将python中的中文使用un ...

  3. Python报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)

    解决办法: 在报错的页面添加代码: import sys reload(sys) sys.setdefaultencoding('utf8')

  4. 【python】python读取文件报错UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 2: illegal multibyte sequence

    python读取文件报错UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 2: illegal multibyte ...

  5. 安装mysql-python报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 65: ordinal not in range(128)

    安装mysql-python报错: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 65: ordinal n ...

  6. python 网络爬虫报错“UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position”解决方案

    Python3.x爬虫, 发现报错“UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1:invalid sta ...

  7. python2.7安装第三方库错误:UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0

    开发环境:win10, x64, pycharm社区版,python2.7.13 python2经常会遇见乱码的问题,并且一遇到中文就乱码.所以我们在安装的时候要注意,无论是解释器interpreto ...

  8. 【python】pip安装报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 7: ordinal not in range(128)

    刚安装完python,准备pip安装第三方库的时候出现了一个错误: UnicodeDecodeError: ‘ascii’ code can’t decode byte 0xef in positio ...

  9. [python]解决Windows下安装第三方插件报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0:

    系统:win7IDE:pycharm Python版本:2.7 安装第三方插件是报错:  报错原因与编码有关,pip把下载的临时文件存放在了用户临时文件中,这个目录一般是C:\Users\用户名\Ap ...

随机推荐

  1. ubuntu vim python配置

    参考https://www.cnblogs.com/cjy15639731813/p/5886158.html 但是后面打开文件的时候会报错,参考https://blog.csdn.net/jeff_ ...

  2. 做报表需要知道的基本的SQL语句

    为客户做报表需要操作数据库,基本的SQL是必须要掌握的,下面介绍做报表最常用的SQL语句.   方法/步骤   1 查询数据:编号表示查询顺序. (8) select (9) distinct (11 ...

  3. mysql主从延迟(摘自http://www.linuxidc.com/Linux/2012-02/53995.htm)

    http://www.linuxidc.com/Linux/2012-02/53995.htm

  4. eclipse启动 报错,错误信息为 return exit code=13

    打不开的报错如下图: 解决方法:手工配置Eclipse使用的JDK,在Eclipse的安装目录中找到eclipse.ini文件,增加正确的JDK安装目录,如图 在plugins/ 下一行,增加 -vm ...

  5. Openstack创建虚拟机 Restful api和RPC调用

    Horizon前台界面用于接受用户的输入或动作(action),然后将这些参数构造成RESTful API(https://developer.openstack.org/api-ref/comput ...

  6. linux常用命令:chown 命令

    chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID:文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令,在将文件拷贝 ...

  7. C/C++之单例模式实现

    /*** * 保证一个类仅有一个实例,并提供一个访问它的全局访问点 */ #include <iostream> #include <string> using namespa ...

  8. P3627 [APIO2009]抢掠计划

    P3627 [APIO2009]抢掠计划 Tarjan缩点+最短(最长)路 显然的缩点...... 在缩点时,顺便维护每个强连通分量的总权值 缩完点按照惯例建个新图 然后跑一遍spfa最长路,枚举每个 ...

  9. Python 自学基础(四)——time模块,random模块,sys模块,os模块,loggin模块,json模块,hashlib模块,configparser模块,pickle模块,正则

    时间模块 import time print(time.time()) # 当前时间戳 # time.sleep(1) # 时间延迟1秒 print(time.clock()) # CPU执行时间 p ...

  10. 04: 事件驱动、五种I/O操作、I/O多路复用select和epoll

    网络编程其他篇 目录: 1.1 事件驱动 1.2 五种I/O操作 1.3 I/O 多路复用之select.poll.epoll详解 1.1 事件驱动返回顶部 1.什么是事件驱动  定义:就是根据不同事 ...