2013-06-13 314 views
2

我想从Windows切换到Linux(Ubuntu)编写我的Python程序,但我无法让事情工作。问题来了:我可以看到在Ubuntu中预装了很多模块(比如numpy,pandas,matplotlib等)。他们很好地坐在/ host/Python27/Lib/site-packages目录中。但是当我编写测试python脚本并尝试执行它时,只要我尝试导入模块(例如import numpy as np就给我ImportError: No module named numpy),它就会给我一个ImportError。当我在命令行中键入which python时,我得到/usr/bin/python路径。我想我可能需要改变与python路径相关的东西,但我不知道该怎么做。模块安装时导入Python ImportError [Ubuntu]

回答

8

您可以在终端中使用以下命令查看PYTHONPATH中的文件夹。

python -c "import sys, pprint; pprint.pprint(sys.path)" 

我猜/host/Python27/Lib/site-packages不会是在那里(它听起来并不像一个普通的Python路径。您是如何安装这些软件包?)。

如果你要的文件夹添加到您的PYTHONPATH然后使用以下命令:

export PYTHONPATH=$PYTHONPATH:/host/Python27/Lib/site-packages 

个人在这里是使用Python开发的一些建议:

  1. 使用virtualenv。这是一个非常强大的工具,可以创建沙盒python环境,因此您可以安装模块并将它们与主解释器分开。

  2. 使用pip - 当您创建virtualenv并激活它时,可以使用pip install为您安装软件包。例如pip install numpy会将numpy安装到您的虚拟环境中,并且只能从此virtualenv访问。这意味着你也可以安装不同的版本进行测试等。非常强大。我建议使用pip来安装你的python软件包而不是使用ubuntu apt-get install,因为你更可能获得更新版本的模块(apt-get依赖于某人打包最新版本的python库,并且可能无法使用pip )。

  3. 在编写可执行文件(chmod +x my_python_script.py)的Python脚本时,请确保将#!/usr/bin/env python放在最顶端,因为它会在您的虚拟环境中选取python解释器。如果你不(并且放#!/usr/bin/python)那么运行./my_python_script.py将总是使用系统python解释器。

+0

我猜这些软件包是由Ubuntu安装的,因为我没有在完全安装Ubuntu之后自行安装任何python软件包。我已经尝试将'/ host/...'路径添加到PYTHONPATH,但是仍然无法找到各种依赖关系。我会尝试使用'virtualenv'来代替它,看看它是否有效。谢谢你的回复 – MPA

1

/host/Python27/Lib/site-packages不是linux安装上的默认python目录,据我所知。

根据您的处理器架构,应该在/usr/lib/usr/lib64之下找到正常的python安装(和python软件包)。

如果你想查一下Python是除了这些目录中搜索您可以使用一个终端使用以下命令:

echo $PYTHONPATH 

如果未列出/host/Python27/Lib/site-packages路径,尝试使用以下命令再次尝试:

export PYTHONPATH=$PYTHONPATH:host/Python27/Lib/site-packages 

如果这应该工作,你不希望你要使用这些软件包,简单地把它放入一个叫.bashrc文件在您home FOL每次写在终端der(通常为/home/<username>)。