Python3始终显示ImportError消息

时间:2016-08-27 20:15:56

标签: python python-2.7 python-3.x pip importerror

每当我尝试运行脚本时,python解释器总是会显示ImportError消息,例如({)No module named 'setuptools'。所以,我尝试使用apt-get安装(或满足此要求)...我为Python 2.7和Python 3.5执行此操作直到Requirement already satisfied

首先,我不使用Python 2.7,但它是解释器的默认版本。那么,我怎么能解决这个问题才能使用Python 3.5?我试过这个:

>>> import sys
>>> print(sys.path)
['',
 '/usr/local/lib/python35.zip',
 '/usr/local/lib/python3.5',
 '/usr/local/lib/python3.5/plat-linux',
 '/usr/local/lib/python3.5/lib-dynload',
 '/usr/local/lib/python3.5/site-packages']

这是针对 Python3 ,对于Python2,我做了相同的比较路径,我得到了这个:

>>> import sys
>>> print(sys.path)
['',
 '/usr/local/lib/python2.7/dist-packages/pygame-1.9.2b8-py2.7-linux-x86_64.egg',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PILcompat',
 '/usr/lib/python2.7/dist-packages/gtk-2.0']

现在......如果我使用append()方法将Python2的所有路径添加到Python3中的路径,它是否可行?另外,我一直被认为完全卸载了Python2,但我知道这会在我的系统中引起更多问题,我试图解决这个问题。

2 个答案:

答案 0 :(得分:2)

尝试:

python3.5 -m pip install setuptools

答案 1 :(得分:2)

根据您对问题的描述,您可能已经使用apt和/或pip安装了所需的Python 2版本的软件包。例如,sudo apt-get install python-django将安装Django的Python 2版本,而sudo apt-get install python3-django将安装Py3版本。

您最终会遇到需要使用pip的情况,因为您希望赢得的软件包不在Debian / Ubuntu存储库中。在这种情况下,请确保您使用了正确的pip。尝试运行

pip -V

pip3 -V

查看调用pip时附加的Python版本,然后使用适合您希望定位的Python版本的版本。

最后,在任何情况下都不应该将Python 2路径添加到Python 3 sys.path

修改

这是我使用系统的Python 3.5.2在Ubuntu 16.04上的sys.path

$ python3
Python 3.5.2 (default, Jul  5 2016, 12:43:10) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> from pprint import pprint as pp
>>> pp(sys.path)
['',
 '/usr/local/lib/python3.5/dist-packages/pandas-0.18.1-py3.5-linux-x86_64.egg',
 '/usr/local/lib/python3.5/dist-packages/github3.py-1.0.0a4-py3.5.egg',
 '/usr/local/lib/python3.5/dist-packages/uritemplate.py-0.3.0-py3.5.egg',
 '/usr/lib/python3/dist-packages',
 '/usr/lib/python35.zip',
 '/usr/lib/python3.5',
 '/usr/lib/python3.5/plat-x86_64-linux-gnu',
 '/usr/lib/python3.5/lib-dynload',
 '/usr/local/lib/python3.5/dist-packages']
>>> print(sys.executable)
/usr/bin/python3
>>>

当您拥有dist-packages时,您会注意到这些路径是site-packages路径。从用户的角度来看,两者之间的差异很小,所以不用担心。我还故意改变了一些路径(这是一个很长的故事)。