ImportError: cannot import name ‘main’
最近在使用scrapy框架,但是在运行scrapy的时候,出现openSSL的问题,在网上查看答案,是因为版本不兼容,需要卸载重新安装。但是在执行sudo pip3 uninstall pyopenssl 时,又出现了ImportError: cannot import name 'main’的问题,详情如下:
wu@ubuntu:~/PycharmProjects/scrapy$ sudo pip3 uninstall pyopenssl
Traceback (most recent call last):
File "/usr/bin/pip3", line 11, in <module>
sys.exit(main())
NameError: name 'main' is not defined
网上搜到的解决办法都是更改pip3中的导包路径。但是试过了,不管用。于是就自己去源文件里面查看路径问题。
第一步:打开/usr/bin/pip3,内容如下
#!/usr/bin/python3
# GENERATED BY DEBIAN
import sys
# Run the main entry point, similarly to how setuptools does it, but because
# we didn't install the actual entry point from setup.py, don't use the
# pkg_resources API.
from pip import main
if __name__ == '__main__':
sys.exit(main())
而在pip源码中,没有定义的函数main,所以猜想指的是__main__!
于是,将import路径改为from pip import main
然后运行,又报错了,但是不再是main的问题,说明上一个问题已经解决,再看错误信息:
Traceback (most recent call last):
File "/usr/bin/pip3", line 11, in <module>
sys.exit(main())
NameError: name 'main' is not defined
发现这个地方也要改,于是打开pip查看源码,将pip3中sys.exit(main()) 改为 sys.exit(main._main())
保存,退出。
再执行前面的命令,bingo!!!