折腾:
【未解决】本地搭建和部署运行Django项目
期间,Ubuntu中升级了pip3后,去运行pip3,结果报错:
1 2 3 4 5 | # pip3 install pipenv Traceback (most recent call last): File "/usr/bin/pip3" , line 9 , in <module> from pip import main ImportError: cannot import name 'main' |
去看看:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # cat /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()) # ll /usr/bin/python3 lrwxrwxrwx 1 root root 9 Oct 26 2016 / usr / bin / python3 - > python3. 5 * |
结果:
ubuntu python ImportError: cannot import name ‘main’
1 2 | # which pip3 /usr/local/bin/pip3 |
然后发现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | root@VM - 158 - 80 - ubuntu:~ / xxx / xxx - backend # ll /usr/local/bin/pip pip pip3 pip3. 5 root@VM - 158 - 80 - ubuntu:~ / xxx / xxx - backend # ll /usr/local/bin/pip* - rwxr - xr - x 1 root root 215 Jun 11 21 : 03 / usr / local / bin / pip * - rwxr - xr - x 1 root root 215 Jun 11 21 : 03 / usr / local / bin / pip3 * - rwxr - xr - x 1 root root 215 Jun 11 21 : 03 / usr / local / bin / pip3. 5 * root@VM - 158 - 80 - ubuntu:~ / xxx / xxx - backend # cat /usr/local/bin/pip3 #!/usr/bin/python3 # -*- coding: utf-8 -*- import re import sys from pip._internal import main if __name__ = = '__main__' : sys.argv[ 0 ] = re.sub(r '(-script\.pyw|\.exe)?$' , '', sys.argv[ 0 ]) sys.exit(main()) |
就不一样。
那就先去试试这个local bin下面的pip3能否用:
1 2 3 4 | # /usr/local/bin/pip3 install pipenv Collecting pipenv Downloading https: //files .pythonhosted.org /packages/13/b4/3ffa55f77161cff9a5220f162670f7c5eb00df52e00939e203f601b0f579/pipenv-2018 .11.26-py3-none-any.whl (5.2MB) |██████████████ | 2.3MB 73kB /s eta 0:00:40 |
说明是可以的。
-》那就采用这个写法。
把之前的
/usr/bin/pip3
换成:
/usr/local/bin/pip3
-》不过,突然想到,应该去改PATH路径,更靠谱
1 2 | # echo $PATH /usr/local/sbin : /usr/local/bin : /usr/sbin : /usr/bin : /sbin : /bin : /usr/games : /usr/local/games : /snap/bin |
已经是:
/usr/local/bin
在
/usr/bin
之前了啊,
估计是当前shell问题?
断开ssh连接,重新ssh登录,结果再去
1 2 3 4 5 6 7 | # pip3 install pipenv Requirement already satisfied: pipenv in /usr/local/lib/python3 .5 /dist-packages (2018.11.26) Requirement already satisfied: certifi in /usr/local/lib/python3 .5 /dist-packages (from pipenv) (2019.3.9) Requirement already satisfied: pip>=9.0.1 in /usr/local/lib/python3 .5 /dist-packages (from pipenv) (19.1.1) Requirement already satisfied: virtualenv in /usr/local/lib/python3 .5 /dist-packages (from pipenv) (16.6.0) Requirement already satisfied: virtualenv-clone>=0.2.5 in /usr/local/lib/python3 .5 /dist-packages (from pipenv) (0.5.3) Requirement already satisfied: setuptools>=36.2.1 in /usr/local/lib/python3 .5 /dist-packages (from pipenv) (41.0.1) |
没有报错。说明安装成功了。
说明前面错误没了。
那再去随便安装一个其他的库试试pip3是否正常了。
不够想起来直接去加上路径,即可测试是否工作:
1 2 3 4 5 | # /usr/bin/pip3 --version Traceback (most recent call last): File "/usr/bin/pip3" , line 9 , in <module> from pip import main ImportError: cannot import name 'main' |
说明旧的还是有问题。
但是此处已经由PATH决定,用的pip3的是正常的了。
【总结】
Ubuntu中,从旧版本pip3升级到最新版后,去用pip3会报错:
1 | ImportError: cannot import name 'main' |
原因:
当前shell中环境还是旧的
-》虽然用which去找,的确是最新版本了
1 2 | # which pip3 /usr/local/bin/pip3 |
但是实际上调用的还是旧的版本,从而报错。
解决办法:
关闭当前shell
-》此处是通过SecureCRT的ssh远程登录到Ubuntu,则是关闭连接,重新打开连接即可。
附录:
新版本pip3:
1 2 3 4 5 6 7 8 9 10 11 12 | # cat /usr/local/bin/pip3 #!/usr/bin/python3 # -*- coding: utf-8 -*- import re import sys from pip._internal import main if __name__ = = '__main__' : sys.argv[ 0 ] = re.sub(r '(-script\.pyw|\.exe)?$' , '', sys.argv[ 0 ]) sys.exit(main()) |
旧版本pip3:
1 2 3 4 5 6 7 8 9 10 11 12 | # cat /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()) |
转载请注明:在路上 » 【已解决】Ubuntu升级pip后pip3 install报错:ImportError cannot import name main