在编写Python程序时候命名在IDE中运行正常可是到了服务器上就出现各种问题,经常发生的就是如下的错误:

ImportError: No module named 'hello'

这个错误我相信大家都不陌生学习初期都会遇到尤其是你引入第三方模块(从网上下载的或者是你自己写的)的时候可能会发生。那是为什么呢?在Python中这些东西叫做模块,可是在系统中其实就是目录,既然你要使用这些模块也就是目录里面的内容那么Python解释器肯定要能找到才行,其实就跟系统中的环境变量一样,编译安装程序的时候经常要手动设置环境变量为什么呢?同样的道理如果你不设置那么你使用这些命令的时候就要使用绝对路径或者进入到命令所在目录才可以,你要想随时随地使用就必须设置环境变量,告诉系统去哪里找这些命令。知道原因之后我们看看Python是怎么找这些模块的?

Python解释器如何找到模块

sys.path

这个函数输出的是一个列表它就包含了搜索模块的路径,这个列表的第一个路径就是当前路径,所谓当前路径就是你运行Python程序的当前路径,比如你的程序放在/home/zhangsan/test.py, 在运行这个程序的时候,这个程序的sys.path列表的第一个路径就是/home/zhangsan,其余的就是系统默认的路径,如下图:

Python解释器就是通过这个类别来搜索模块的,如果你引入的模块不在这个列表里那么显然就找不到了,也就有了上面的错误。那如何添加呢?

既然sys.path输出是一个列表,那么我们就可以在列表中添加。看下图:

两个列表是不是不同呢?

 #!/usr/bin/env python
# -*- coding: utf-8 -*- import sys print sys.path
# 添加
sys.path.insert(1, "/work/apps/mymodules")
print sys.path

这里为什么使用insert呢,其实你使用append也可以,使用插入就是为了让它快速找到。这种是动态添加的,作用范围仅仅是当前py文件,如果你的很多py文件都引入了其他模块怎么办?一个一个修改太麻烦了。

PYTHONPATH

这是个环境变量,系统默认没有。你需要自己设置。

编辑 vim ~/.bashrc

export PYTHONPATH=$PYTHONPATH:/YOU_MODULE_DIRECTORY

然后执行 source ~/.bashrc 使其生效即可。不过不推荐这种方式,因为它会改变prefix和exec_prefix的值,默认情况下prefix和exec_prefix都是/usr/local

.pth文件

这种方式很简单便于管理,在需要大量添加外部路径的时候非常推荐,而且是永久生效。启动Python程序时候,解释器就会遍历目录,遇到pth就会读取这个文件中的内容并添加到sys.path中。这里以系统自带的Python2.7为例说明

/usr/lib/python2.7/site-packages

其内容就是路径

Python模块查找路径的更多相关文章

  1. Python 模块搜索路径 -- (转)

    最近在看<Python源码剖析>,对Python内部运行机制比以前了解的更深入了,感觉自己有机会也可以做个小型的动态脚本语言了,呵呵,当然是吹牛了.目的当然不是创造一个动态语言,目的只有一 ...

  2. python模块与路径

    # 切记不能与方法函数同名,否则会报错!!! # python的模块与包 分为三种: #1.标准库 #2.第三方模块 #3.自定义模块 #python 模块的引入原理: # 加入你创建了一个模块,在i ...

  3. python模块安装路径

    Unix(Linux): prefix/lib/pythonX.Y/site-packages 默认路径:/usr/local/lib/pythonX.Y/site-packages 另外,在Unix ...

  4. Python模块搜索路径

    当一个名为 spam 的模块被导入的时候,解释器首先寻找具有该名称的内置模块.如果没有找到,然后解释器从 sys.path 变量给出的目录列表里寻找名为 spam.py 的文件.sys.path 初始 ...

  5. Python 模块搜索路径

    Python 会在什么地方寻找文件来导入模块? 使用命名为 path 变量的存储在标准 sys 模块 下的一系列目录名和 ZIP 压缩文件. 你可以读取和修改这个列表.下面是在我的 Mac 上 Pyt ...

  6. Python模块安装路径初探

    在调用MySQL第三方工具mysqlrplsync是报错 mysqlrplsync --master=checksum:checksum@master_ip:3306 --slave=checksum ...

  7. Python模块定义和使用

    Python中所谓的模块就是一个Python文件,一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块.模块由代码.函数或类组成.编程中使用模块不仅可以提 ...

  8. python 模块路径查找 及 添加

    **** python 模块路径查找: 通过模块的__file__属性来确定: **** 模块路径添加: 方法一:函数添加1 import sys2 查看sys.path3 添加sys.path.ap ...

  9. python27期day15:自定义模块、模块导入、模块的路径、模块的查找顺序、time、datetime、random、os、sys、作业题

    1.模块的介绍: py文件就是一个模块 2.模块的分类:内置模块:python标准库 200 第三方模块 自定义模块 3.为什么学习模块? 开发效率高,内置函数和模块 减少重复代码,分文件管理,有助于 ...

随机推荐

  1. 我对PMO的理解(持续更新)

    PMO的价值 为项目管理提供方法上的指导,对项目的实施过程提供监督.评价. PMO应该从哪方面着手建立管理体系 如何量化工作 如何考评工作 如何激励员工 如何进行人工.成本核算 如何进行进度跟踪与控制 ...

  2. Spark环境搭建(六)-----------sprk源码编译

    想要搭建自己的Hadoop和spark集群,尤其是在生产环境中,下载官网提供的安装包远远不够的,必须要自己源码编译spark才行. 环境准备: 1,Maven环境搭建,版本Apache Maven 3 ...

  3. Machine Learning学习资源

    引申:非原创,转载来自:https://blog.csdn.net/ptkin/article/details/50995140

  4. layedit第三次改造

    原文链接:http://www.bianbingdang.com/article_detail/105.html 作为技术人员,在网上写代码,常常涉及代码块的编写.一个好的代码块,让页面美化很多. 由 ...

  5. 超时导致的Galera节点加入集群失败

    需求:为galera集群添加新的节点. 初始化新的节点,加入的时候一直报错,加入失败,报错日志如下 WSREP_SST: [ERROR] Removing /var/lib/mysql//.sst/x ...

  6. [微信跳转链接]之WAP浏览器跳转微信指定页面,微信跳转链接

    今天在一个小说的链接上看到最后,点击一个[继续阅读按钮]居然唤起微信APP,在微信内打开一个二维码,长按识别后可关注微信公众号, 后来分析出:weixin://dl/business/?ticket= ...

  7. elasticsearch 文档资料

    1.Function Score Query 自定义查询评分 https://www.elastic.co/guide/en/elasticsearch/reference/current/query ...

  8. 在虚拟机中安装Centos系统

    1.首先下载VMware 2.然后可以去http://mirrors.aliyun.com下载映像ISO 3.打开VM,点击创建新的虚拟机 4.选择典型模式 5.稍后安装操作系统 6.选择你所要安装的 ...

  9. System.data.sqlclient.sqlexception:将截断字符串或二进制数据终止

    System.data.sqlclient.sqlexception:将截断字符串或二进制数据终止. 错误原因:输入的字符串长度超过数据库设置的长度

  10. 自然语言处理(四)统计机器翻译SMT

    1.统计机器翻译三要素 1.翻译模型 2.语言模型 3.排序模型 2.翻译流程 1.双语数据预处理 2.词对齐 3.构造短语翻译表 4.对短语翻译表进行概率估计 5.解码,beam search 6. ...