本人是Windows10,用的方法2解决的

原文链接http://blog.csdn.net/all_over_servlet/article/details/45112221

先交待下开发环境:

操作系统: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)
  47.  
     

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

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

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是脚本语言的特性

3、如果本文对您有用,请支持原创,谢谢

---------------------------------------------------------------------------------

关注微信公众号即可在手机上查阅,并可接收更多测试分享~

Windows10使用pip安装python包时报错-UnicodeDecodeError: 'ascii' codec c的更多相关文章

  1. windows下pip安装python模块时报错

    windows下pip安装python模块时报错总结  装载于:https://www.cnblogs.com/maxaimee/p/6515165.html 前言: 这几天把python版本升级后, ...

  2. windows下pip安装python模块时报错【转】

    windows下pip安装python模块时报错总结 请给作者点赞--> 原文链接 1 权限问题 C:\Users\ljf>pip install xlwt Exception: Trac ...

  3. pip安装python包时报字符编码错

    比如安装scikit-learn时报错: django ascii’ codec can’t encode character 原因是用户目录或用户名存在中文,ascii不能解码,解决办法是在Pyth ...

  4. 安装python包时报错

    pip install numpy  时  报错: Traceback (most recent call last):  File "d:\学习\python\python-3.6.5\l ...

  5. windows下pip安装python模块时报错总结

    http://www.cnblogs.com/liaojiafa/p/5100550.html 前言: 这几天把python版本升级后,发现pip安装模块好多都报错(暂不确定是不是因为升级导致的),我 ...

  6. 运行python代码报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 91: ordinal not in range(128)的解决办法

    1.通过搜集网上的资料,自己多次尝试,问题算是解决了,在代码中加上如下几句即可: import sys reload(sys) sys.setdefaultencoding('utf-8') 2.原因 ...

  7. 【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 ...

  8. python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multib

    python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multib ...

  9. python读取txt文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x8e in position 8: illegal multibyte sequence

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

随机推荐

  1. *205. Isomorphic Strings (string & map idea)

    Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...

  2. 我的Java修养

    无论如何我都会以这种方式严于律己,如有错误接受修正. 1.戒掉对友情和爱情的幻想 2.针对人的行为进行分析,而不是其语言 3.解决一个问题,这个问题会成为解决后续问题的基础和前提 4.不要炫耀,自负, ...

  3. node 上的cookie的签名和解签名

    cookie签名的原因是防止别人篡改cookie原本的值,如果这个过程中cookie被改变的话,就会在unsign方法返回false 代码: var cookie = require("co ...

  4. 【LOJ6043】「雅礼集训 2017 Day7」蛐蛐国的修墙方案(搜索技巧题)

    点此看题面 大致题意: 给你一个长度为\(n\)的排列\(p\),要求构造一个合法的括号序列,使得如果第\(i\)个位置是左括号,则第\(p_i\)个位置一定是右括号. 暴搜 很容易想出一个暴搜. 即 ...

  5. css3阴影 box-shadow

    语法 box-shadow:X轴偏移量 y轴偏移量 [阴影模糊半径] [阴影扩展半径] [阴影颜色] [投影方式] 参数介绍: 注:inset 可以写在参数的第一个或最后一个,其它位置是无效的. 阴影 ...

  6. python同时遍历数组的索引和元素

    1.一般要同时遍历数组的索引和元素需要先确定数组的长度length(元素个数),然后使用range函数来生成数组的索引,最后使用该索引来访问数组的元素. 具体做法如下: l = [2,7,11,15] ...

  7. 【洛谷P1314】[NOIP2011]聪明的质监员

    聪明的质监员 题目链接:https://www.luogu.org/problemnew/show/P1314 Y(W)随W的值增大而减小 二分W的值,找到最小的W使得Y(W)>S: 比较Y(W ...

  8. 【洛谷P1525】[NOIP2010]关押罪犯

    关押罪犯 题目链接 思路: 二分图或并查集 这里讲并查集算法: 1.将每对罪犯的冲突关系按影响从大到小排序 2.将集合与(i+n)合并表示编号为i的罪犯不能在该集合内 3.依次从大到小处理冲突关系: ...

  9. java 打印流 递归复制子文件子文件夹 不同编码文件复制到同一文件中 序列化流反序列化流

    package com.swift.jinjie; import java.io.BufferedInputStream; import java.io.File; import java.io.Fi ...

  10. MyString类的实现--基础中的基础C语言

    MyString 类是学习 C++ 的过程中一个很重要的例子,涉及到面向对象的封装.堆内存申请和释放.函数的重载以及 C++ 的 “Big Three”.本例子重点在于复习和理解上述的 C++ 特性, ...