本着下定义开头吧:python中import某个A模块时,首先会从python的内置模块中查找是否含义该模块的定义若未查询到会从sys.path对应的模块路径查询是否含有对应模块的定义,如果搜索完成依然没有对应A模块时则抛出import的异常

接着说明下python的两种加载py文件的方式:

  • python xxx.py
  • python -m xxx.py

第一种方式是直接运行方式

第二种方式是把模块当做脚本来启动

可能看起来说的python运行方式和sys.path有点大相径庭,但实际上两种不同方式的运行导致sys.path[0]的值是有差异的

第一种方式:sys.path[0]是当前脚本的运行目录

第二种方式:sys.path[0]是空值字符串,也就是当前执行python的目录

sys.path是一个python搜索模块的路径列表:
 eg、下边的X.py文件中打印出sys.path内容:

import sys
print sys.path

python x.py运行

其中sys.path[0]是 I:\restful_code\tester,对应调用python解释器的脚本所在的目录。 其实就是存放需要运行的代码的路径

python -m x.py运行

什么是python解释器?

当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。

由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。

常见的Python解释器有: CPython IPython   PyPy  Jython   IronPython

 使用场景:

在实际开发中,默认包含了当前目录为搜索路径,所以,当前目录下的模块和子模块均可以正常访问。但是若一个模块需要import平级的不同目录的模块,或者上级目录里面的模块,就可以通过修改path来实现

修改path的两种方法:

方法一:函数添加
这是即时生效的方法,就是在模块里面修改sys.path值,这种方法修改的sys.path作用域只是当前进程,进程结束后就失效了。
个人比较推荐这种方法,比较干净, 避免一些冲突问题。

比如现在的代码目录结构:

/src/configs/config.py
/src/common/Database.py

假如Database.py期望导入config. py,则可以增加上级目录到sys.path列表里面:

parent_path = os.path.dirname(sys.path[0])
if parent_path not in sys.path:
sys.path.append(parent_path)
import configs.config

方法一:修改环境变量

添加系统环境变量PYTHONPATH,在这个环境变量中输入相关的路径,不同的路径之间用逗号(英文的!)分开。路径会自动加入到sys.path中。

最新文章

  1. java并发编程(十八)阻塞队列和阻塞栈
  2. maven-bundle-plugin 2.4.0以下版本导出META-INF中的内容到MANIFEST.MF中
  3. Oracle的数据恢复——Flashback用法汇总
  4. 拓展Jquery对象,实现Post提交并跳转
  5. jQuery1.9.1--queue队列源码分析(非动画部分)
  6. ruby sass Encoding::CompatibilityError for changes
  7. nyoj 找球号三(除了一个数个数为基数,其他为偶数,编程之美上的)
  8. C++的显示转换
  9. JavaScript HTML DOM - 改变 HTML
  10. 关于highcharts(功能强大、开源、美观、图表丰富、兼容绝大多数浏览器的纯js图表库)
  11. nginx的使用配置
  12. 读书笔记 effective c++ Item 54 让你自己熟悉包括TR1在内的标准库
  13. Vue表单控件绑定
  14. cocos2dx - 生成怪物及AI
  15. Java泛型范例
  16. 第31月 第9天 责任链AppDelegate
  17. 工作随笔—static关键字
  18. 微信小程序不能超过十个并发的解决办法
  19. 关于Android Camera2 API 的自动对焦的坑
  20. String----是一个对象

热门文章

  1. C#高低位分解转换备忘
  2. gitlab部署步骤+汉化
  3. SQL 查询当天,本月,本周的记录
  4. ASP.NET 4.0 :MasterPage母版页的ClientIDMode属性
  5. xtrabackup的执行过程
  6. DokuWiki 插件使用
  7. 物化视图SQL
  8. 安装zookeeper遇到的问题
  9. Java异常学习总结一
  10. 刘志梅201771010115.《面向对象程序设计(java)》第四周学习总结