在编写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. firefox添加post插件

    附加组件 - > 插件 -> 搜索RESTClient

  2. pyenv global 设置失败 pyenv local 设置就成功了 不知道啥原因

    dev@PC-20190309QPVT:/mnt/c/data/htdocs/python/flaskr$ pyenv global 3.6.1dev@PC-20190309QPVT:/mnt/c/d ...

  3. Android应用程序如何使用Internet资源?

    思路:连接Internet资源-->分析XML资源-->使用Download Manager下载文件 Android的Internet连接模型和用于分析Internet数据源的Java技术 ...

  4. 禁止字符串 [POJ3691缩减版]

    题意考虑只由'A','G','C','T'四种字符组成的DNA字符串给定一个长度为k的字符串S,计算长度恰好为n的且不包含S的字符串的个数输入结果对10009取膜1<=k<=100,1&l ...

  5. 移动端h5 实现多个音频播放

    前一段时间做到一个项目,其中用到很多之前没用过的东西,其中一个就是h5的多音频实现,背景音频和说话同时播放,其中出现了很多问题,不过总算找到了解决方案. 平时做H5如果只有一个音乐的话就直接在页面里面 ...

  6. Linux进阶命令用法

    1.tr命令 可以对来自标准输入的字符进行替换.压缩和删除.它可以将一组字符变成另一组字符 选项 -c或——complerment:取代所有不属于第一字符集的字符: -d或——delete:删除所有属 ...

  7. java对文件的基本操作

    package cn.edu.fhj.day009.FileDemo; import java.io.File; import java.io.IOException; public class Fi ...

  8. 201771010126 王燕《面向对象设计 java》第十五周实验总结

    第一部分  理论部分 ◼ JAR文件◼ 应用程序首选项存储◼ Java Web Start JAR文件: 1.Java程序的打包:程序编译完成后,程序员将.class文件压缩打包为.jar文件后,GU ...

  9. 0~5年一个Java程序员的晋升之路

    在程序界流行着一种默认的说法叫“黄金5年”,也就是一个程序员从入职的时候算起,前五年的选择直接影响着整个职业生涯中的职业发展方向和薪资走向,如何走好这5年,彻底从一个刚入行的菜鸟蜕变成可以以不变应万变 ...

  10. [Zephyr] 1、在linux上安装Zephyr-OS并跑DEMO

    星期五, 14. 九月 2018 02:18上午 - BEAUTIFULZZZZ 0) 前言 Zephyr™项目是一个采用Apache 2.0协议许可,Linux基金会托管的协作项目.为所有资源受限设 ...