Python中模块互相调用容易出错,经常是在本地路径下工作正常,切换到其他路径来调用,就各种模块找不到了。解决方法是通过 __file__

定位当前文件的真实路径,再通过 sys.path.append()

来获取相对路径更新 $PATH

即可。

假设代码结构如下:

- mod_a

__init__.py # 模块文件夹内必须有此文件

aaa.py

- mod_b

__init__.py # 模块文件夹内必须有此文件

bbb.py

- ccc.py

调用同级模块

如果aaa.py要调用bbb.py的内容,可以在aaa.py中如下写:

import sys

sys.path.append(osp.join(osp.dirname(__file__), '..')) # 扫除路径迷思的关键!

from mod_b.bbb import *

调用下级模块

如果ccc.py要调用bbb.py的内容,可以在ccc.py中如下写:

from mod_b.bbb import *

调用上级模块

如果aaa.py要调用ccc.py的内容,可以在aaa.py中如下写:

import sys

sys.path.append(osp.join(osp.dirname(__file__), '..'))

from ccc import *

代码示例:

aaa.py如下:

# -*- coding: utf-8 -*-

from __future__ import print_function

import os.path as osp

import sys

sys.path.append(osp.join(osp.dirname(__file__), '..'))

from mod_b.bbb import *

from ccc import *

def print_a():

print('this is a')

def _call_mod_b():

print_a()

print_b()

def _call_mod_c():

print_c()

if __name__=='__main__':

_call_mod_b()

_call_mod_c()

bbb.py如下:

# -*- coding: utf-8 -*-

from __future__ import print_function

def print_b():

print('this is b')

if __name__=='__main__':

pass

ccc.py如下:

# -*- coding: utf-8 -*-

from __future__ import print_function

from mod_b.bbb import *

def print_c():

print('this is c')

def _call_mod_b():

print_c()

print_b()

if __name__=='__main__':

_call_mod_b()

如此,当不管在何处调用aaa.py时,结果都一样,如下:

this is a

this is b

this is c

如果调用ccc.py,结果如下:

this is c

this is b

python中的模块调用_Python中模块互相调用的例子相关推荐

  1. python中的模块原则_python 的模块与包

    一 模块 1.什么是模块 ​ 模块是一系列功能的结合体 ​分为三大类: ​1.内置的模块 ​2.第三方的模块 ​3.自定义的模块 ​一个 python 文件本身就是一个模块,文件名:m.py 模块名: ...

  2. python中importlib模块安装_Python中标准模块importlib详解

    Python中标准模块importlib详解 模块简介 Python提供了importlib包作为标准库的一部分.目的就是提供Python中import语句的实现(以及__import__函数).另外 ...

  3. python中大括号是什么_Python中模块(Module)和包(Package)到底是什么,有什么区别?...

    1. 模块(Module) 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个 ...

  4. python导入模块快捷键_Python中的模块导入和读取键盘输入的方法

    导入模块 import 语句 想使用Python源文件,只需在另一个源文件里执行import语句,语法如下: ? 当解释器遇到import语句,如果模块在当前的搜索路径就会被导入. 搜索路径是一个解释 ...

  5. python url模块介绍_python 中 urlparse 模块介绍

    urlparse模块主要是用于解析url中的参数  对url按照一定格式进行 拆分或拼接 1.urlparse.urlparse 将url分为6个部分,返回一个包含6个字符串项目的元组:协议.位置.路 ...

  6. python中parse是什么_Python中optparse模块使用浅析

    最近遇到一个问题,是指定参数来运行某个特定的进程,这很类似Linux中一些命令的参数了,比如ls -a,为什么加上-a选项会响应.optparse模块实现的也是类似的功能,它是为脚本传递命令参数. 使 ...

  7. python 当前时间的前一天_python中time、datetime模块的使用

    python中time.datetime模块的使用 1.前言 如果您从事过python web的开发,那一定有过这样的经历,对于各种复杂繁琐的业务逻辑,掺杂着各种各样的时间约束,让人很容易搞的头晕眼花 ...

  8. python中os模块教程_python os模块功能和方法总结

    os.sep     可以取代操作系统特定的路径分割符 os.linesep  字符串给出当前平台使用的行终止符.例如,Windows使用' ',Linux使用' ' 而Mac使用''. os.nam ...

  9. pythonmathcot函数_math库是python语言的数学模块吗_Python中的数学模块:Math和Cmath

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 当我们在日常生活中编写程序时,我们通常遇到需要使用数学来完成任务的情况.像其他编程语言一样,Python提 ...

最新文章

  1. python实训心得2000_实训总结万能版2000字五篇
  2. ubuntu sudoers配置错误
  3. 高程 第6章面向对象的程序设计 6.1 理解对象
  4. 交叉编译_Golang交叉编译
  5. poj-2231(Moo Volume) 递推
  6. Win10安装华三模拟器各种疑难问题
  7. 【My Project】数字频率测量FPGA实现
  8. TeamViewer远程访问
  9. 协鑫集成“熄灯工厂”装上ET工业大脑,验证订单命中率可提高3.99%
  10. objective-c 语法快速过(4)
  11. [Unity] Animation Blend Tree 中混合值变化时部分骨骼错误旋转 360 度的解决办法:将 Humanoid 改成 Generic
  12. 述职答辩提问环节一般可以问些什么_内部资料,仅供阿里在职同事传阅:晋升答辩成功要诀...
  13. 第15章 音乐可视化(《Python趣味创意编程》教学视频)
  14. 美团外卖返利小程序-饿了么外卖返利公众号系统 – 程序侠
  15. SQL 基础教程:SQL 通配符
  16. matlab符号运算与数值运算的转化
  17. C51玩8x8LED点阵:PointGame —— 收藏数爆炸的LED小游戏
  18. 软件架构详解(附图)
  19. 几何画板如何添加按钮
  20. win10打开蓝牙_这4个Win10新增的快捷键,提高效率必备

热门文章

  1. Spring Data Jpa出现Not supported for DML operations
  2. tomcat的localhost_access_log日志文件
  3. 带负荷测试要求二次最小电流_差动保护带负荷测试
  4. 为什么css效果在本地测试没问题,上传到服务器后却显示位置乱动,css下拉菜单本地正常,上传后360浏览器中显示错位,火狐、IE8显示正常...
  5. HashMap的五种遍历方法
  6. http状态 404 - 未找到_404终结者来了!
  7. Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed betwee...
  8. Apollo限制app获取配置
  9. java 连接数据库查询_JAVA连接数据库,查询功能怎么写
  10. 随机生成指定个数学生的语文数学外语成绩并求平均值