“python3”和“python”是否使用不同的路径变量?

“python3”和“python”是否使用不同的路径变量?

该命令python打开 Python 2.7.6 环境。如果我想解释 Python 3 脚本,我需要将命令重写为python3

我刚刚安装了numpy包。为了测试安装是否成功,我运行了命令import numpy。使用该命令时效果很好python。但是,python3找不到包。

这怎么可能?这两个命令使用不同的小路变量?我该如何改变行为?

答案1

你说得对,他们使用不同的PYTHONPATH秒。

你可以将 Python 2.x 和 Python 3.x 视为完全不同的编程环境。没错,它们将包存储在不同的位置。

要使 numpy 工作,你可以输入:

sudo apt-get install python3-numpy

如果你想知道包的具体保存位置,你可以查看模块对象__path__属性:

>>> import numpy
>>> numpy.__path__
['/usr/local/lib/python3.5/site-packages/numpy']

您还可以安装python3-pip并运行pip3 install whatever以安装适用于 Python 3 的软件包点数,对于 Ubuntu 中没有的软件包python3-whatever

如果您对 distutils、setuptools、easy_install、pip 和其他工具之间的区别感到困惑,请使用 pip。这很酷。:)

答案2

不,他们使用相同的PATH。然而,问题不在于PATH

Python 2 和 Python 3 有很大不同,因此必须为它们分别编写包。您不能将为其中一个编写的包与为另一个编写的包一起使用。

在 Ubuntu 中,这些模块存储在不同的位置,并单独打包 -python-numpy对于 Python 2,python3-numpy适用于 Python 3。如果你想要使用 Python 3 的 numpy,请安装python3-numpy

$ python3 -c 'import sys; print (sys.path)'
['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/home/muru/.local/lib/python3.4/site-packages', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']
$ python2 -c 'import sys; print (sys.path)'
['', '/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', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']

答案3

事实上,两者都是从不同的位置导入模块:

  • Python2.7:/usr/lib/python2.7/dist-packages/numpy/
  • Python3.x: /usr/lib/python3/dist-packages/numpy/

为了能够numpy使用两个解释器进行导入,请确保安装其相应的软件包:

  • Python2.7:sudo apt-get install python-numpy
  • Python3.x: sudo apt-get install python3-numpy

相关内容