关于 python ImportError: No module named 的问题及解决办法

python中,每一个py文件被称之为模块,每一个具备init.py文件的目录被称为包。只要模块或者包所在的目录在sys.path中,就可使用import 模块或import 包来使用。html

若是想使用非当前模块中的代码,须要使用Import,这个你们都知道。
若是你要使用的模块(py文件)和当前模块在同一目录,只要import相应的文件名就好,好比在a.py中使用b.py:
import b
可是若是要import**一个不一样目录的文件**(例如b.py)该怎么作呢?
首先须要使用sys.path.append方法将b.py**所在目录加入到搜素目录中**。而后进行import便可,例如python

import sys
sys.path.append(‘c:\xxxx\b.py’) # 这个例子针对 windows 用户来讲的git

大多数状况,上面的代码工做的很好。可是若是你没有发现上面代码有什么问题的话,可要注意了,上面的代码有时会找不到模块或者包(ImportError: No module named xxxxxx),这是由于:
sys模块是使用c语言编写的,所以字符串支持 ‘\n’, ‘\r’, ‘\t’等来表示特殊字符。因此上面代码最好写成:github

sys.path.append(‘c:\xxx\b.py’)
或者sys.path.append(‘c:/xxxx/b.py’)web

这样能够避免由于错误的组成转义字符,而形成无效的搜索目录(sys.path)设置。ubuntu

但上述方法是针对脚原本说的,每次使用要记得加上,若是永久性的加入某个目录到sys.path中去呢?windows

如何将路径“永久”添加到sys.path?bash

sys.path是python的搜索模块的路径集,是一个list
能够在python 环境下使用sys.path.append(path)添加相关的路径,但在退出python环境后本身添加的路径就会自动消失了!app

可使用如下命令输入当前python 的搜索路径:
python -c”import sys;print ‘当前的python是:’+sys.prefix;print ‘\n’.join(sys.path)”
练习使用sys.path.append方法添加路径,显示退出python会消失!curl

python -c”import sys;print ‘当前的python是:’+sys.prefix;sys.path.append(r’E:\DjangoWord’);print ‘\n’.join(sys.path)”
再次运行,会发现 本身添加路径E:\DjangoWord()不存在了!

python -c”import sys;print ‘当前的python是:’+sys.prefix;print ‘\n’.join(sys.path)”

为解决这个问题,能够有如下方法:

1.将本身作的py文件放到 site_packages 目录下:
下面命令显示了 site-packages 目录:
python -c “from distutils.sysconfig import get_python_lib; print get_python_lib()”
可是这样作会致使一个问题,即各种模块都放到此文件夹的话,会致使乱的问题,这一点是显而易见的。
注意,也不建立子文件夹,再将本身的模块放到子文件夹解决问题,这会致使使用import 语句时错误。

2.使用pth文件,在 site-packages 文件中建立 .pth文件,将模块的路径写进去,一行一个路径,如下是一个示例,pth文件也可使用注释:

==.pth file for the my project(这行是注释)
E:\DjangoWord
E:\DjangoWord\mysite
E:\DjangoWord\mysite\polls
这个不失为一个好的方法,但存在管理上的问题,并且不能在不一样的python版本中共享。

3.使用PYTHONPATH环境变量,在这个环境变量中输入相关的路径,不一样的路径之间用逗号(英文的!)分开,若是PYTHONPATH 变量还不存在,能够建立它!以下图所示:
这里写图片描述

这里的路径会自动加入到sys.path中,并且能够在不一样的python版本中共享,应该是同样较为方便的方法。

关于与python相关的环境变量有那些,请参考:
http://docs.python.org/using/cmdline.html 在页面上找到PYTHONPATH

附:python安装模块的多种方法

一、本身写的模块,能够直接添加到路径下。这样就能够直接调用。
import sys
sys.path.append(“/home/username/”)

二、单文件模块
直接把文件拷贝到$python_dir/lib

三、网上下载的第三方库,通常解压后,找setup.py文件
运行python setup.py install

四、 egg文件
1) 下载ez_setup.py,运行python ez_setup
2) easy_install *.egg

五、pip安装方法
Pip 是安装python包的工具,提供了安装包,列出已经安装的包,升级包以及卸载包的功能。
Pip 是对easy_install的取代,提供了和easy_install相同的查找包的功能,所以可使用easy_install安装的包也一样可使用pip进行安装。

安装Pip
Pip的安装能够经过源代码包,easy_install或者脚本。
下面介绍一下各类安装方法:
源代码方式:
$ wget https://pypi.python.org/packages/source/p/pip/pip-1.2.1.tar.gz (替换为最新的包)
tarxzfpip1.2.1.tar.gz cd pip-1.2.1.tar.gz
pythonsetup.pyinstalleasyinstall: easy_install pip
get_pip.py 脚本:
$ curl -0 https://raw.github.com/pypa/pip/master/contrib/get-pip.py
sudopythongetpip.pyOK,Pip使package pip install Markdown
列出安装的packages
pipfreezepackage使==,>=,<=,>,< pip install ‘Markdown<2.0’
pipinstallMarkdown>2.0,<2.0.3使Uupgrade pip install -U Markdown
卸载包
$ pip uninstall Markdown
查询包
pip search “Markdown”

六、特殊库的安装(一个科学计算库Enthought Python Distribution的安装)
Enthought Python Distribution在ubuntu下安装的测试,应一个网友的请求,问怎么安装这个库,从官方网站上下载了一个文件
epd_free-7.3-2-rh5-x86.sh,遮个文件是sh 格式的文件,用sudo bash epd_free-7.3-2-rh5-x86.sh 运行这个文件,出现不少权限的阅读,点回车,不要连续点
须要点一次看一下,最后出现一个同一不一样一它的版权声明,输入”yes”,再下来是让选择安装的目录,点回车,就安装在当前目录下。
这样就安装好了。
当前目录下输入:
ipython –pylab

就出来
Python 2.7.3 (default, Apr 20 2012, 22:44:07)
Type “copyright”, “credits” or “license” for more information.
IPython 0.12.1 – An enhanced Interactive Python.
? -> Introduction and overview of IPython’s features.
%quickref -> Quick reference.
help -> Python’s own help system.
object? -> Details about ‘object’, use ‘object??’ for extra details.
Welcome to pylab, a matplotlib-based Python environment [backend: TkAgg].
For more information, type ‘help(pylab)’.
再这样调用。这个库因为我工做上用不上,因此也不须要进一步的研究。
In [1]: from scipy import *
In [2]: a=zeros(1000)
In 3]: a[:100]=1
In [4: b=fft(a)
In [5]: plot(abs(b))

转载于:http://my.oschina.net/leejun2005/blog/109679?fromerr=6s3rPySJ