文档章节

关于 python ImportError: No module named 的问题

大数据之路
 大数据之路
发布于 2013/02/21 19:03
字数 1892
阅读 194292
收藏 14
点赞 8
评论 8

今天在 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

© 著作权归作者所有

共有 人打赏支持
大数据之路
粉丝 1476
博文 501
码字总数 343984
作品 0
武汉
架构师
加载中

评论(8)

x
xhgd
请教一下我from appium import webdriver这一句报错应该怎么办?
探员
探员
正是我遇到的问题,太感谢了!!
linshubin
linshubin
還可以通過編輯site-pakages下的cumstomize.py文件來自動加入path。(不過在osx下好像不行)
vesper305
vesper305

引用来自“vesper305”的评论

不知道您还看的到不?
您上面说的第三种方法,是指在windows系统变量设置那里设置PYTHONPATH,还是指设置Python解释器的Pythonpath?

引用来自“xrzs”的评论

why not try one try yourself ? 这很难么? 送你一句话: 如果你想学到东西,在这个行业走的远一点,只有实践出真实,不要指望别人处处把答案摆到你面前。。。
嗯,谢谢您的指点。我会记住的。
大数据之路
大数据之路

引用来自“vesper305”的评论

不知道您还看的到不?
您上面说的第三种方法,是指在windows系统变量设置那里设置PYTHONPATH,还是指设置Python解释器的Pythonpath?
why not try one try yourself ? 这很难么? 送你一句话: 如果你想学到东西,在这个行业走的远一点,只有实践出真实,不要指望别人处处把答案摆到你面前。。。
vesper305
vesper305
不知道您还看的到不?
您上面说的第三种方法,是指在windows系统变量设置那里设置PYTHONPATH,还是指设置Python解释器的Pythonpath?
首席安全砖家
首席安全砖家
遇到个bug , ImportError: No module named math.latex2mathml

已经安装了 Docutils , python setup.py install

在/usr/local/lib/python2.7/dist-packages/docutils/utils/math 也 有 latex2mathml.py
运行Django 的 时候,还是报无法 找到这个模块。 latex2mathml.py 的权限也是755
MrMign
MrMign
不是还有个相对路径的吗?这个不行?
ubuntu切换python默认版本从2.7到3.5后 报错 ImportError: No module named 'pip'

使用pip遇到错误ImportError: No module named packaging.version的解决方法 2017年03月22日 16:08:33 阅读数:3148 由于需要用到pip,所以在Ubuntu上安装了一个,由于Python是2.7版本的,所...

Jake_xun ⋅ 05/16 ⋅ 0

扫描端口占用情况的python脚本

之前项目上线前,领导要求让写一个脚本用来判断端口的占用情况。由于现在python3使用也比较多,基于python2修改了一下,做了个python3版本的,现在做一下总结。 一、python脚本实现扫描端口:...

babyhanggege ⋅ 2017/06/21 ⋅ 0

Python专题----A guid fo python pip

pip类似RedHat里面的yum,安装[Python]包非常方便。本节详细介绍pip的安装、以及使用方法。 1、pip下载安装 1.1 pip下载 1.2 pip安装 pip使用详解 2.1 pip安装包 2.2 pip查看已安装的包 2.3 ...

鸿蒙无上至尊 ⋅ 04/20 ⋅ 0

ImportError: No module named psutil的解决

系统版本: cat /etc/redhat-release CentOS release 6.9 (Final) 跑python脚本的时候报错ImportError: No module named psutil,于是想要用pip来安装,但是发现pip也没装: # pip install ...

emma_cql ⋅ 06/09 ⋅ 0

pip 安装使用 ImportError: No module named setuptools

安装过程详见这篇博客: http://blog.51cto.com/sf1314/2112533 安装后运行到:出现错误,错误图片如下所示: [root@localhost pip-1.5.4]# python setup.py install Traceback (most recent...

Mr_sheng ⋅ 06/13 ⋅ 0

ImportError: No module named pkg_resources解决方案

这个问题通常是由于升级到python2.7后执行pip产生的,解决方案是重新在python2.7环境中安装pip,步骤如下: 系统:centos7(建议用centos7,6的话需要升级的库太多,glibc也得升级,升级不好...

liguoyuan ⋅ 05/23 ⋅ 0

手把手教你eclipse集成Python+Tensorflow环境

1.安装Eclipse 百度Eclipse安装,网上有很多的教程,要先安装Eclipse就必须先安装JDK,这些百度一下下载就可以了,至于安装过程你只需 要一直点击下一步默认安装就行,选择版本的话就选择第一...

qq_33407981 ⋅ 04/20 ⋅ 0

ubuntu软件中心打不开No module named 'apt_pkg'

故事的起源:最近看了《黑客与画家》,决定要学个动态语言,但lisp难点,ruby又是鬼子搞的,所以选了python。ubuntu12.10里python的默认版本是2.7,但我看最新的是3.3,于是,更新癖再犯,各...

好铁 ⋅ 2013/04/12 ⋅ 0

import keras 出错,应该怎么解决

>>> import keras /usr/local/lib/python2.7/dist-packages/h5py/init.py:36: FutureWarning: Conversion of the second argument of issubdtype from to is deprecated. In future, it will......

好奇小学生1 ⋅ 05/23 ⋅ 0

python3.4 之sqlite3,pymysql

python3.4导入sqlite3是报错,如下: >>> import sqlite3 Traceback (most recent call last): File "", line 1, in import sqlite3 File "/usr/local/python3.4/lib/python3.4/sqlite3/init......

Leyin ⋅ 2017/06/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vim编辑模式、命令模式

编辑模式 vim要从一般模式进入编辑模式只要按字母 i 、I、a、A、o、O键就可以了 要从编辑模式回到一般模式按键盘上的Esc键即可。 按键 作用 i 在当前字符前插入 I 在光标所在行的行首插入 o ...

黄昏残影 ⋅ 23分钟前 ⋅ 0

OSChina 周五乱弹 —— 如果有一天不当程序员了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @guanglun :分享off的单曲《我唱情歌给你听》 《我唱情歌给你听》- off 手机党少年们想听歌,请使劲儿戳(这里) @小小编辑 :#如果不做程序...

小小编辑 ⋅ 30分钟前 ⋅ 4

从 Confluence 5.3 及其早期版本中恢复空间

如果你需要从 Confluence 5.3 及其早期版本中的导出文件恢复到晚于 Confluence 5.3 的 Confluence 中的话。你可以使用临时的 Confluence 空间安装,然后将这个 Confluence 安装实例升级到你现...

honeymose ⋅ 今天 ⋅ 0

Java8新增的DateTimeFormatter与SimpleDateFormat的区别

两者最大的区别是,Java8的DateTimeFormatter也是线程安全的,而SimpleDateFormat并不是线程安全。 在并发环境下使用SimpleDateFormat 为了能够在多线程环境下使用SimpleDateFormat,有这三种...

人觉非常君 ⋅ 今天 ⋅ 0

多线程如何控制执行顺序

线程的生命周期说明: 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、...

MarinJ_Shao ⋅ 今天 ⋅ 0

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Django第一期

安装Django 去https://www.djangoproject.com/download/ 下载最新版的Django,然后解压放到Anaconda\Lib\site-packages目录下,然后cmd进入此目录,输入安装命令: python setup.py install ...

大不了敲一辈子代码 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部