转载自:http://my.oschina.net/leejun2005/blog/109679

今天在 centos 下安装 python setup.py install 时报错:ImportError: No module named sysconfig, 
当时急着用,就顺手直接源码编译了一把,make install 后就 ok 了。 
然后又在 cygwin 下安装时同样的问题,这下 cygwin 源码编译也不行了,因为会调用很多 linux 特有的类库。 
虽然最后解决了 import 的问题,但是又报了其它错。比如 ldconfig 啥的,可能是我cygwin环境没装全。 
只有换方法:从cygwin开源镜像上下载好 cygwin binary 版本的 python 2.7.3, 
然后覆盖到相应的目录即可。

事后我查了下 python 的import机制,以备忘:

python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包。只要模块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用。 
  
如果想使用非当前模块中的代码,需要使用Import,这个大家都知道。 
如果你要使用的模块(py文件)和当前模块在同一目录,只要import相应的文件名就好,比如在a.py中使用b.py: 
import b 
但是如果要import一个不同目录的文件(例如b.py)该怎么做呢? 
首先需要使用sys.path.append方法将b.py所在目录加入到搜素目录中。然后进行import即可,例如 
import sys 
sys.path.append('c:\xxxx\b.py') # 这个例子针对 windows 用户来说的 
大多数情况,上面的代码工作的很好。但是如果你没有发现上面代码有什么问题的话,可要注意了,上面的代码有时会找不到模块或者包(ImportError: No module named xxxxxx),这是因为: 
sys模块是使用c语言编写的,因此字符串支持 '\n', '\r', '\t'等来表示特殊字符。所以上面代码最好写成: 
sys.path.append('c:\\xxx\\b.py') 
或者sys.path.append('c:/xxxx/b.py') 
这样可以避免因为错误的组成转义字符,而造成无效的搜索目录(sys.path)设置。

 

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

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

sys.path是python的搜索模块的路径集,是一个list

可以在python 环境下使用sys.path.append(path)添加相关的路径,但在退出python环境后自己添加的路径就会自动消失了!

可以使用以下命令输入当前python 的搜索路径:

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

练习使用sys.path.append方法添加路径,显示退出python会消失!

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)"

为解决这个问题,可以有以下方法:


将自己做的py文件放到 site_packages 目录下:

下面命令显示了 site-packages 目录:

python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

但是这样做会导致一个问题,即各类模块都放到此文件夹的话,会导致乱的问题,这一点是显而易见的。

注意,也不创建子文件夹,再将自己的模块放到子文件夹解决问题,这会导致使用import 语句时错误。


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

# .pth file for the  my project(这行是注释)
E:\DjangoWord
E:\DjangoWord\mysite
E:\DjangoWord\mysite\polls

这个不失为一个好的方法,但存在管理上的问题,而且不能在不同的python版本中共享。


使用PYTHONPATH环境变量,在这个环境变量中输入相关的路径,不同的路径之间用逗号(英文的!)分开,如果PYTHONPATH 变量还不存在,可以创建它!如下图所示:

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

关于与python相关的环境变量有那些,请参考:

http://docs.python.org/using/cmdline.html  在页面上找到PYTHONPATH


以下是该环境变量的描述:

PYTHONPATH

Augment the default search path for module files. The format is the same asthe shell’s PATH: one or more directory pathnames separated byos.pathsep (e.g. colons on Unix or semicolons on Windows).Non-existent directories are silently ignored.

In addition to normal directories, individual PYTHONPATH entriesmay refer to zipfiles containing pure Python modules (in either source orcompiled form). Extension modules cannot be imported from zipfiles.

The default search path is installation dependent, but generally begins withprefix/lib/pythonversion (see PYTHONHOME above). Itis always appended to PYTHONPATH.

An additional directory will be inserted in the search path in front ofPYTHONPATH as described above underInterface options. The search path can be manipulated fromwithin a Python program as the variable sys.path.

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

1、自己写的模块,可以直接添加到路径下。这样就可以直接调用。
import sys
sys.path.append("/home/username/")

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

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

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

5、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 (替换为最新的包)
   $ tar xzf pip-1.2.1.tar.gz
   $ cd pip-1.2.1.tar.gz
   $ python setup.py install
   easy_install:
   $ easy_install pip
   get_pip.py 脚本:
   $ curl -0 https://raw.github.com/pypa/pip/master/contrib/get-pip.py
   $ sudo python get-pip.py
   OK, 下面来看一下Pip的使用
   安装package
   $ pip install Markdown
   列出安装的packages
   $ pip freeze
   安装特定版本的package
   通过使用==, >=, <=, >, <来指定一个版本号。
   $ pip install 'Markdown<2.0'
   $ pip install 'Markdown>2.0,<2.0.3'
   升级包
   升级包到当前最新的版本,可以使用-U 或者 --upgrade
   $ pip install -U Markdown
   卸载包
   $ pip uninstall Markdown
   查询包
   pip search "Markdown"

6、特殊库的安装(一个科学计算库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))

REF:

无法import的原因(ImportError: No module named *****)

http://hi.baidu.com/itaolei/item/197d9f10521ba8011894ec99

近期python 学习的一些总结:添加路径到sys.path

http://hi.baidu.com/billschen/item/9ee4aad4b5a9391d21e25016

python 关于 ImportError: No module named 的问题的更多相关文章

  1. [Python]CentOS - ImportError: No module named '_curses'

    网上搜了不少答案, 基本都是说Windows环境下curses包不适用的问题. 作为碰到这个问题的linux用户,实在感到无奈. 起因是在CentOS上部署uwsgi,想要使用uwsgitop来监控. ...

  2. python错误 ImportError: No module named setuptools 解决方法[转]

    在python运行过程中出现如下错误: python错误:ImportError: No module named setuptools这句错误提示的表面意思是:没有setuptools的模块,说明p ...

  3. Python 之 ImportError: No module named ***

    假设想使用非当前模块中的代码,须要使用Import.这个大家都知道. 假设你要使用的模块(py文件)和当前模块在同一文件夹.仅仅要import对应的文件名称就好,比方在a.py中使用b.py: imp ...

  4. Python错误“ImportError: No module named MySQLdb”解决方法

    这个错误可能是因为没有安装MySQL模块,这种情况下执行如下语句安装: pip install MySQLdb 如果安装时遇到错误“_mysql.c:29:20: 致命错误:Python.h:没有那个 ...

  5. 初识python 之 ImportError: No module named _ssl

    场景 安装好python之后,导入ssl模块报错: ImportError: No module named _ssl 解决方法 查看openssl.openssl-devel是否安装 rpm -qa ...

  6. Python (Windows) - ImportError: No module named win32service

    ImportError: No module named win32service you have to install pypiwin32

  7. Python执行ImportError:No module named MySQLdb异常

  8. Python Error: “ImportError: No module named six”,用自动安装解决依赖问题

    在初次运行带有matplotlib包的程序时,被告知了缺少模块(如标题所示).搜索调查后发现在自己安装的python中确实缺少此安装包,接下来,进行了下载.安装.运行,又少了一个模块,再下载.再运行, ...

  9. python打怪之路【第二篇】:ImportError: No module named setuptools

    在python安装第三方模块时出现如下错误: python错误:ImportError: No module named setuptools这句错误提示的表面意思是:没有setuptools的模块, ...

随机推荐

  1. 动手学servlet(四) cookie和session

    Cookie   cookie是保存在客户端的一个“键值对”,用来存储用户的一些信息 cookie的应用: -在电子商务会话中标识用户 -对网站进行定制,比如你经常浏览哪些内容,就展示哪些页面给你 - ...

  2. Html5——WEB(客户端)数据存储

    在客户端存储数据 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 之前, ...

  3. KSImageNamed-Xcode-master 对项目中图片提供自动提示功能的插件

    .使用介绍: (1)KSImageNamed-Xcode-master的使用 安装该插件后,会对文件中图片进行智能提示.  下载地址:http://yun.baidu.com/s/1qWNkvGK  

  4. 【转】iOS高级向的十道面试问题

    原文:http://onevcat.com/2013/04/ios-interview/ 不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘者技 ...

  5. GCD 深入理解(一)

    http://www.cocoachina.com/industry/20140428/8248.html 本文由@nixzhu翻译至raywenderlich的<grand-central-d ...

  6. idea 破解服务器

    idea 最新破解服务器 http://idea.iteblog.com/key.php

  7. 没有终结点在侦听可以接受消息的*这通常是由于不正确的地址或者 SOAP操作导致的

    引发原因:项目启动时,前端调用  wcf地址,引用的地址访问无法在 IIS Express找到导致该错误 解决方法,找出前端的web.config 查看引用的项目是什么地址开头,如   localho ...

  8. Chrome 和 Webkit 的渊源

    互联网的浪潮从未停息,而用以网上冲浪的冲浪板也一直在变得愈加精良.自人们进入互联网时代以来,即已经发生了三次浏览器大战.第一次浏览器大战的主角是IE和Netscape,最终IE凭借着Windows的庞 ...

  9. 使用Apache CXF开发WebServices服务端、客户端

    在前一篇的博客中,我使用Xfire1.x来开发了WebServies的服务端. 但是如果你访问Apache的官网,可以看到xfire已经被合并了. 最新的框架叫做CXF. Apache CXF = C ...

  10. a different object with the same identifier value was already associat

    问题:这个著名的托管态update更新异常 org.hibernate.NonUniqueObjectException: a different object with the same ident ...