linux - 如何让 python 访问 ubuntu 中的系统范围模块?

标签 linux python-2.7 ubuntu numpy python-module

我在 Ubuntu 16.04(64 位版本)中安装了 python 2.7.12。我也通过 pip 安装了 numpy、scipy、sympy 等模块。我的问题是,当我通过终端打开 python 命令行并尝试导入这些模块时,出现以下错误:

$ python
Python 2.7.12 (default, Jul 10 2016, 20:42:07) 
[GCC 5.3.1 20160413] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named numpy
>>>

经过一些研究,我发现了这个 thread如果我使用 /usr/bin/python 打开 python 命令行并尝试导入这些模块,我不会收到任何错误。

$ /usr/bin/python
Python 2.7.11+ (default, Apr 17 2016, 14:00:29) 
[GCC 5.3.1 20160413] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> import scipy
>>> import sympy
>>> import matplotlib
>>> import pandas
>>> 

但我想知道是否有任何方法可以让我从终端输入 python 并在 python 命令行中导入这些模块?例如,如果我写这样一个程序,

x = 2
print x
y = 5
print y
print x+y

import numpy
import scipy
import sympy

将它保存在我桌面上名为 test.py 的文件中,然后使用命令 /usr/bin/python test.py 打开它,我得到了所需的输出。

$ /usr/bin/python test.py
2
5
7

但是如果我用命令 python test.py 尝试相同的操作,我会再次收到错误

$ python test.py
2
5
7
Traceback (most recent call last):
  File "test.py", line 8, in <module>
    import numpy
ImportError: No module named numpy

据我了解,python 无法访问系统范围的模块,因为它是在本地安装的。如果是这样,有没有办法使 python 全局或 python 本地模块?在过去的几个小时里,我一直在尝试寻找解决方案,但我还没有找到任何东西,而且我是 Linux 的新手。感谢您的帮助。

最佳答案

我认为根本原因是您在 $PATH 下有几个 python 二进制文件,并且您的系统默认不使用 /usr/bin/python

  1. 运行命令which python查看默认使用哪个python
  2. 将默认的 python 文件重命名为类似“python-2-7-12”的名称

然后再次尝试运行python test.py,看是否解决。

关于linux - 如何让 python 访问 ubuntu 中的系统范围模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38298196/

相关文章:

linux - 在 linux 终端中查找并删除文件名中包含相同字符串的文件

python - 无法安装 MySQL-python [CentOS]

c++ - c++11 是否提供与 python maketrans/translate 中实现的类似的解决方案?

linux - 当我编译时,我通过了配置但是当我是 'making'时遇到错误

shell脚本上的bash无效算术运算符

c - 在c中查找特定文件类型并保存

python - 使用多个命令行参数运行 nohup 并重定向标准输入

linux - 如何让 sar 显示特定日期?

python - 根据行索引、列引用遍历 df 列并返回数据框中的值

Java 'System.err.format' 和 '%n' 后跟 'System.out.println' , println 在中间打印