python中的模块调用_[笔记]Python中模块互相调用的例子

本文介绍了解决Python中模块互相调用的问题,通过使用__file__和sys.path.append()方法定位真实路径并更新$PATH,确保在不同路径下也能正确调用模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 threading模块

Python threading模块 直接调用 # !/usr/bin/env python # -*- coding:utf-8 -*- import threading import time d ...

Python中模块之os的功能介绍

Python中模块之os的功能介绍 1. os的变量 path 模块路径 方法:os.path 返回值:module 例如:print(os.path) >>>

python中使用ctypes调用MinGW生成的动态链接库(dll)

关于gcc编译dll的我就不说了,网上举例一大堆,下面以g++为例. 假设有一个test.cpp文件如下: extern "C" { __declspec(dllexport) d ...

查看python中模块的所有方法

查看python中模块的所有方法     安装的python模块,现将查看方法总结如下 一.CMD命令行下使用pydoc命令 在命令行下运行$ pydoc modules即可查看 二.在python交 ...

[python]关于在python中模块导入问题追加总结

[背景] 最近在写程序时,我使用的eclipse编辑器运行都没有问题,然后部署到自动化环境上却偏偏报找不到相应模块问题,现在对该问题在之前的贴子上追加总结 原帖子:[python]关于python中模 ...

《构建之法》教学笔记——Python中的效能分析与几个问题

中第2章对效能分析进行了介绍,基于的工具是VSTS.由于我教授的学生中只有部分同学选修了C#,若采用书中例子讲解,学生可能理解起来比较困难.不过所有这些学生都学习 ...

Python中模块之copy的功能介绍

模块之copy的功能介绍 copy主要分两种: 1.浅拷贝 2.深拷贝 赋值: 在python中赋值算特殊的拷贝,其实赋值可以理解为同一个对象有两个名字,所以当其中一个发生变化,另一个也跟着会变化. ...

Python中模块的发布与安装

模块(Module) Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个 ...

Python中模块(Module)和包(Package)的区别

本文绝大部分内容转载至:廖雪峰官方网站 1. 模块(Module) 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函 ...

随机推荐

java中的集合

集合比数组的优势: 1.集合可以存任意类型的变量,长度是可变的 2.数组只能存同一类型的变量,长度是固定的 3.集合中只能存对象 List集合 : 接口  提供公有的方法 特有的方法: 1.List中 ...

线段树 + 矩阵 --- ZOJ 3772 Calculate the Function

Calculate the Function Problem's Link:   http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCod ...

delphi SpeedButtonDown

的属性 的事件 的方法   设置SpeedButton的Down的属性      AllowAllUp属性 当有多个SpeedButton时 让有2个按钮都能处于按下状态 设置它的GroupIndex ...

使用NetUserAdd API函数创建远程用户

http://apps.hi.baidu.com/share/detail/33407620 使用NetUserAdd编程创建远程用户Windows API NetUserAdd()可以创建Windo ...

Codeforces Round #352 (Div. 2) (A-D)

672A Summer Camp 题意: 1-n数字连成一个字符串, 给定n , 输出字符串的第n个字符.n 很小, 可以直接暴力. Code: #include

springboot源码解读01

package org.springframework.web; @javax.servlet.annotation.HandlesTypes({org.springframework.web.Web ...

windows 10 安装TortoiseSVN.msi时报2503的错误

解释: 出现这个错误的原因是权限不足,右击安装程序也没有“以管理员身份运行”按钮. 解决: 输入 msiexec /package  F:\TortoiseSVN-1.9.7.27907-x64.ms ...

在nginx中,禁止IP访问.只可以使用域名访问.

if ($host ~* "\d+\.\d+\.\d+\.\d+"){ ; } 其实说白了, 就是进行host主机头过滤,使用正则来判断下.

oozie 安装过程详解

1.从apache的官网下载oozie3.3.2 2.编译oozie,以下命令用root来执行吧,它不做任何的测试的,因为一测试就会出错的 官网估计也知道,所以顺便也提供了一个跳过参数的命令... b ...

echarts折线图个性化填充、线条、拐点样式

由于每组数据的拐点样式.线条颜色都不一样,所以series里的每组数据都需要单独设置样式. 首先先来看一下完成后的效果吧 具体设置如下 series: [ { name:systemName[0], ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值