Windows下使用pip安装python包是报错-UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0
2015-04-18 12:18
706 查看
原文链接http://blog.csdn.net/all_over_servlet/article/details/45112221
先交待下开发环境:
操作系统:Windows 7
Python版本:2.7.9
Pip版本:6.1.1
其他环境忽略
在windows下使用pip下载python包,出现如下错误
什么原因导致了这样的问题?在我的电脑上出现这个问题的原因是由于我的用户目录是中文的,pip在下载的时候调用了这样一行代码
那问题要怎么解决呢?有两种方法解决:
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)函数,在函数内第一行加入
一切准备就绪,重新执行pip安装试试吧
总结:
1、据说python3的默认编码为'utf-8',可能不存在这种问题,没有实际测试过
2、这次我直接修改了python和pip中的源码,体现了python是脚本语言的特性
3、如果本文对您有用,请支持原创,谢谢
先交待下开发环境:
操作系统:Windows 7
Python版本:2.7.9
Pip版本:6.1.1
其他环境忽略
在windows下使用pip下载python包,出现如下错误
Collecting xxxxxx Exception: Traceback (most recent call last): File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\basecommand.py", line 232, in main status = self.run(options, args) File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\commands\install.py", line 339, in run requirement_set.prepare_files(finder) File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\req\req_set.py", line 333, in prepare_files upgrade=self.upgrade, File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\index.py", line 305, in find_requirement page = self._get_page(main_index_url, req) File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\index.py", line 783, in _get_page return HTMLPage.get_page(link, req, session=self.session) File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\index.py", line 872, in get_page "Cache-Control": "max-age=600", File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\requests\sessions.py", line 473, in get return self.request('GET', url, **kwargs) File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\download.py", line 365, in request return super(PipSession, self).request(method, url, *args, **kwargs) File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\requests\sessions.py", line 461, in request resp = self.send(prep, **send_kwargs) File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\requests\sessions.py", line 610, in send r.content File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\requests\models.py", line 730, in content self._content = bytes().join(self.iter_content(CONTENT_CHUNK_SIZE)) or bytes() File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\requests\models.py", line 655, in generate for chunk in self.raw.stream(chunk_size, decode_content=True): File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\requests\packages\urllib3\response.py", line 256, in stream data = self.read(amt=amt, decode_content=decode_content) File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\requests\packages\urllib3\response.py", line 186, in read data = self._fp.read(amt) File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\cachecontrol\filewrapper.py", line 54, in read self.__callback(self.__buf.getvalue()) File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\cachecontrol\controller.py", line 217, in cache_response self.serializer.dumps(request, response, body=body), File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\download.py", line 268, in set return super(SafeFileCache, self).set(*args, **kwargs) File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\cachecontrol\caches\file_cache.py", line 83, in set with FileLock(name) as lock: File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\lockfile\mkdirlockfile.py", line 18, in __init__ LockBase.__init__(self, path, threaded, timeout) File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\_vendor\lockfile\__init__.py", line 189, in __init__ hash(self.path))) File "D:\Python27\lib\ntpath.py", line 84, in join result_path = result_path + p_path UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0: ordinal not in range(128)'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)函数,在函数内第一行加入
# Join two (or more) paths. def join(path, *paths): """Join two or more pathname components, inserting "\\" as needed.""" reload(sys) sys.setdefaultencoding('gbk') result_drive, result_path = splitdrive(path) for p in paths: p_drive, p_path = splitdrive(p) if p_path and p_path[0] in '\\/': # Second path is absolute if p_drive or not result_drive: result_drive = p_drive result_path = p_path continue elif p_drive and p_drive != result_drive: if p_drive.lower() != result_drive.lower(): # Different drives => ignore the first path entirely result_drive = p_drive result_path = p_path continue # Same drive in different case result_drive = p_drive # Second path is relative to the first if result_path and result_path[-1] not in '\\/': result_path = result_path + '\\' result_path = result_path + p_path ## add separator between UNC and non-absolute path if (result_path and result_path[0] not in '\\/' and result_drive and result_drive[-1:] != ':'): return result_drive + sep + result_path return result_drive + result_path注意:
reload(sys) sys.setdefaultencoding('gbk')这两行代码是我后加入的
一切准备就绪,重新执行pip安装试试吧
总结:
1、据说python3的默认编码为'utf-8',可能不存在这种问题,没有实际测试过
2、这次我直接修改了python和pip中的源码,体现了python是脚本语言的特性
3、如果本文对您有用,请支持原创,谢谢
相关文章推荐
- [python]解决Windows下安装第三方插件报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0:
- Windows下使用pip安装python包是报错-UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0
- [python]解决Windows下安装第三方插件报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0:
- 【python】pip安装报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xce in position 7: ordinal not i
- python 使用urllib2进行https请求时出现'ascii' codec can't decode byte 0xe9 错误
- pip 安装pandas报UnicodeDecodeError: 'ascii' codec can't decode byte 0xd5错
- python 3以上版本使用pickle.load读取文件报UnicodeDecodeError: 'ascii' codec can't decode byte 0x8b in position 6
- python用pip装第三方库numpy时报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 7: ordi
- pip安装UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range
- pip 安装错误 ‘ascii’codec can't decode byte 0xd6.....
- 【Django】安装python模块时报错:Unicode Decode Error ascii codec can't decode byte…
- Python3.x 使用pip install pylint时报UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5
- pip安装UnicodeDecodeError: 'ascii' codec can't decode byte 0xb6 in position 0: ordinal not in range(12
- windows下安装django提示“UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position”
- python第三方库安装问题-'ascii' codec can't decode byte 0xb0
- Python安装setuptools遇到错误:UnicodeDecodeError : 'ascii' codec can't decode byte 0xe0 in position 0
- Windows下面安装easy_install报UnicodeDecodeError: 'ascii' codec can't decode byte解决方法
- Windows安装easy_install出错: 'ascii' codec can't decode byte
- 使用pyinstaller生成可执行文件出现UnicodeDecodeError: 'ascii' codec can't decode byte 0xb3 in position 12
- Python报错UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe0 in position 0: ordinal not in range