Python模块查找路径
在编写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模块查找路径的更多相关文章
- Python 模块搜索路径 -- (转)
最近在看<Python源码剖析>,对Python内部运行机制比以前了解的更深入了,感觉自己有机会也可以做个小型的动态脚本语言了,呵呵,当然是吹牛了.目的当然不是创造一个动态语言,目的只有一 ...
- python模块与路径
# 切记不能与方法函数同名,否则会报错!!! # python的模块与包 分为三种: #1.标准库 #2.第三方模块 #3.自定义模块 #python 模块的引入原理: # 加入你创建了一个模块,在i ...
- python模块安装路径
Unix(Linux): prefix/lib/pythonX.Y/site-packages 默认路径:/usr/local/lib/pythonX.Y/site-packages 另外,在Unix ...
- Python模块搜索路径
当一个名为 spam 的模块被导入的时候,解释器首先寻找具有该名称的内置模块.如果没有找到,然后解释器从 sys.path 变量给出的目录列表里寻找名为 spam.py 的文件.sys.path 初始 ...
- Python 模块搜索路径
Python 会在什么地方寻找文件来导入模块? 使用命名为 path 变量的存储在标准 sys 模块 下的一系列目录名和 ZIP 压缩文件. 你可以读取和修改这个列表.下面是在我的 Mac 上 Pyt ...
- Python模块安装路径初探
在调用MySQL第三方工具mysqlrplsync是报错 mysqlrplsync --master=checksum:checksum@master_ip:3306 --slave=checksum ...
- Python模块定义和使用
Python中所谓的模块就是一个Python文件,一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块.模块由代码.函数或类组成.编程中使用模块不仅可以提 ...
- python 模块路径查找 及 添加
**** python 模块路径查找: 通过模块的__file__属性来确定: **** 模块路径添加: 方法一:函数添加1 import sys2 查看sys.path3 添加sys.path.ap ...
- python27期day15:自定义模块、模块导入、模块的路径、模块的查找顺序、time、datetime、random、os、sys、作业题
1.模块的介绍: py文件就是一个模块 2.模块的分类:内置模块:python标准库 200 第三方模块 自定义模块 3.为什么学习模块? 开发效率高,内置函数和模块 减少重复代码,分文件管理,有助于 ...
随机推荐
- .Net异步关键字async/await的最终理解
由于之前的项目中自己突然想试试异步action,于是使用了一下,突然就对异步action的执行流程以及原理及其好处产生了兴趣,再参考了一些文章之后,就做了下归类. 我们可以不需要太深入的理解底层,但是 ...
- JavaOOP笔记
http://note.youdao.com/noteshare?id=bbdc0b970721e40d327db983a2f96371
- Analysis CDI
CDI是一组服务,它们一起使用,使开发人员可以轻松地在Web应用程序中使用企业bean和JavaServer Faces技术.CDI设计用于有状态对象,还有许多更广泛的用途,允许开发人员以松散耦合但类 ...
- 蓝鲸单机安装mysql问题记录
1.注意默认启动用户为mysql 2.由于执行指令用的root,有些文件会生成为root用户 3.注意将datadir basedir socket dir 修改称mysql chown mys ...
- python学习相关知识点
1.ndarray中,添加行或列:https://blog.csdn.net/lishuandao/article/details/52444288 2.numpy中ndarray数组拼接方法介绍:h ...
- Keepalived+Nginx实现高可用Web负载均衡
1.安装编译 Nginx 所需的依赖包# yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zli ...
- mysql 水平分表
新建10张表,user_0,user_1,...user_9,方法不可串用,采用hash或取余法,获取要操作的表名,取值用对应存值的方法 1.hash取余法 public function part_ ...
- javascript---split 和 join 的区别
//相同点 : split 和 join 都是对字符或字符串进行操作的 //split(切割字符串) : 把字符串根据切割符切割,返回数组 //第一个参数 分隔符 //第二个参数 返回数组中元素的个数 ...
- [python] python django web 开发 —— 15分钟送到会用(只能送你到这了)
1.安装python环境 1.1 安装python包管理器: wget https://bootstrap.pypa.io/get-pip.py sudo python get-pip.py 1. ...
- JS闭包解析
三点注意事项 JS作用域传送门 JS没有块级作用域,只有全局作用域和局部作用域(函数作用域). JS中的作用域链,内部的作用域可以访问到外部作用域中的变量和方法,而外部作用域不能访问内部作用域的变量和 ...