该命令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