近日升级和安装python的包时总是出现类似的错误
Upgrade packages failed.
The following command was executed:
packaging_tool.py install --build-dir C:\Users\admin\AppData\Local\Temp\pycharm-packaging7494122386570496301.tmp -U selenium
The error output of the command:
Downloading/unpacking selenium from https://pypi.python.org/packages/source/s/selenium/selenium-2.38.3.tar.gz#md5=dae21e5d9ce2f286cb6e2c3f653e9aaa
Running setup.py egg_info for package selenium
Traceback (most recent call last):
File "<string>", line 3, in <module>
File "D:\Python27\lib\site-packages\setuptools\__init__.py", line 11, in <module>
from setuptools.extension import Extension
File "D:\Python27\lib\site-packages\setuptools\extension.py", line 5, in <module>
from setuptools.dist import _get_unpatched
File "D:\Python27\lib\site-packages\setuptools\dist.py", line 15, in <module>
from setuptools.compat import numeric_types, basestring
File "D:\Python27\lib\site-packages\setuptools\compat.py", line 19, in <module>
from SimpleHTTPServer import SimpleHTTPRequestHandler
File "D:\Python27\lib\SimpleHTTPServer.py", line 27, in <module>
class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
File "D:\Python27\lib\SimpleHTTPServer.py", line 208, in SimpleHTTPRequestHandler
mimetypes.init() # try to read system mime.types
File "D:\Python27\lib\mimetypes.py", line 358, in init
db.read_windows_registry()
File "D:\Python27\lib\mimetypes.py", line 258, in read_windows_registry
for subkeyname in enum_types(hkcr):
File "D:\Python27\lib\mimetypes.py", line 249, in enum_types
ctype = ctype.encode(default_encoding) # omit in 3.x!
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range(128)
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 3, in <module>
File "D:\Python27\lib\site-packages\setuptools\__init__.py", line 11, in <module>
from setuptools.extension import Extension
File "D:\Python27\lib\site-packages\setuptools\extension.py", line 5, in <module>
from setuptools.dist import _get_unpatched
File "D:\Python27\lib\site-packages\setuptools\dist.py", line 15, in <module>
from setuptools.compat import numeric_types, basestring
File "D:\Python27\lib\site-packages\setuptools\compat.py", line 19, in <module>
from SimpleHTTPServer import SimpleHTTPRequestHandler
File "D:\Python27\lib\SimpleHTTPServer.py", line 27, in <module>
class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
File "D:\Python27\lib\SimpleHTTPServer.py", line 208, in SimpleHTTPRequestHandler
mimetypes.init() # try to read system mime.types
File "D:\Python27\lib\mimetypes.py", line 358, in init
db.read_windows_registry()
File "D:\Python27\lib\mimetypes.py", line 258, in read_windows_registry
for subkeyname in enum_types(hkcr):
File "D:\Python27\lib\mimetypes.py", line 249, in enum_types
ctype = ctype.encode(default_encoding) # omit in 3.x!
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range(128)
----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in C:\Users\admin\AppData\Local\Temp\pycharm-packaging7494122386570496301.tmp\selenium
Storing complete log in C:\Users\admin\pip\pip.log
通过研究发现,安装时会检查HKEY_CLASSES_ROOT的子键,而邪恶的旺旺每次启动时都会在HKEY_CLASSES_ROOT增加一个'.阿里旺旺接收的可疑文件'键值,这个键值是中文的,就会读取时导致如下错误
mimetypes.init() # try to read system mime.types
File "D:\Python27\lib\mimetypes.py", line 358, in init
db.read_windows_registry()
File "D:\Python27\lib\mimetypes.py", line 258, in read_windows_registry
for subkeyname in enum_types(hkcr):
File "D:\Python27\lib\mimetypes.py", line 249, in enum_types
ctype = ctype.encode(default_encoding) # omit in 3.x!
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range(128)
解决办法,删掉就行了,如果每次删掉比较麻烦,用autoit来删除,代码如下
RegDelete('HKEY_CLASSES_ROOT\.阿里旺旺接收的可疑文件')
编译好的exe也可以在附件中下载
20131226更新:
不只是阿里旺旺会导致出错,只要是注册了中文后缀名都有可能出错,另外每次改也不是一个事儿,推荐一个一劳永逸的方法
进入python安装目录下的Lib目录,打开mimetypes.py文件
在default_encoding = sys.getdefaultencoding()前添加
# begin
if sys.getdefaultencoding() != 'gbk':
reload(sys)
sys.setdefaultencoding('gbk')
# end
即
# begin
if sys.getdefaultencoding() != 'gbk':
reload(sys)
sys.setdefaultencoding('gbk')
# end
default_encoding = sys.getdefaultencoding()
with _winreg.OpenKey(_winreg.HKEY_CLASSES_ROOT, '') as hkcr:
转载于:https://blog.51cto.com/pcliuyang/1339637