当前位置: 首页 > news >正文

python打卡day30@浙大疏锦行

知识点回顾:

  1. 导入官方库的三种手段
  2. 导入自定义库/模块的方式
  3. 导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致)

作业自己新建几个不同路径文件尝试下如何导入

具体操作步骤:
  1. 在桌面上新建一个文件夹 project(这就是项目的根目录)。

  2. 在 project 文件夹内新建 main.py(主程序入口)。

  3. 在 project 内新建 lib 文件夹,并在 lib 内新建 utils.py

  4. 在 project 内新建 subpackage 文件夹:

    • 在 subpackage 内新建 module1.py

    • 在 subpackage 内新建 subsub 文件夹,并在 subsub 内新建 module2.py

  5. 关键步骤:在每个文件夹(subpackage 和 subsub)内新建一个空文件 __init__.py,告诉Python这是“包”(类似一个标志牌)。

2. 编写模块内容

(1) lib/utils.py
# 这是一个工具函数
def greet():print("Hello from utils")

(2) subpackage/module1.py
# 导入系统模块(Python自带的库)
import sys
import os# 动态添加项目根目录到Python的搜索路径
root_path = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
sys.path.append(root_path)# 绝对导入:从项目根目录下的lib文件夹导入utils模块中的greet函数
from lib.utils import greetdef func1():greet()print("This is module1")# 相对导入:从当前包(subpackage)的subsub子包中导入module2的func2函数
from .subsub.module2 import func2
(3) subpackage/subsub/module2.py
import sys
import os# 动态添加项目根目录到Python的搜索路径
root_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
sys.path.append(root_path)# 绝对导入:从项目根目录下的lib文件夹导入utils模块中的greet函数
from lib.utils import greetdef func2():greet()print("This is module2")# 相对导入:从上级包(subpackage)导入module1模块
from .. import module1
(4) main.py
import sys
import os# 确保项目根目录在Python的搜索路径中
root_path = os.path.dirname(os.path.abspath(__file__))
sys.path.append(root_path)# 从subpackage包中的module1模块导入func1和func2
from subpackage.module1 import func1, func2if __name__ == "__main__":func1()  # 调用func1func2()  # 调用func2

3. 运行测试

运行方式一:在项目根目录执行
  1. 打开终端(或命令行),进入 project 文件夹:

    cd /Users/yourname/Desktop/project

  2. 运行主程序:

    python main.py

  3. 预期输出:

    Hello from utils
    This is module1
    Hello from utils
    This is module2

运行方式二:在项目上级目录执行
  1. 在终端中进入项目上级目录(比如桌面):

    cd /Users/yourname/Desktop

  2. 运行主程序:

    python project/main.py

  3. 同样会成功!因为代码中动态添加了根目录路径。

相关文章:

  • 团队氛围紧张,如何提升工作积极性?
  • RSA(公钥加密算法)
  • token令牌
  • Image and depth from a conventional camera with a coded aperture论文阅读
  • day30python打卡
  • FPGA:高速接口JESD204B以及FPGA实现
  • 动态IP技术在跨境电商中的创新应用与战略价值解析
  • Vant 使用整理
  • chrome源码中WeakPtr 跨线程使用详解:原理、风险与最佳实践
  • 一个专为 Windows 用户设计的配置文件集合提供类似 Unix 环境的美化和功能增强。
  • 【物联网】 ubantu20.04 搭建L2TP服务器
  • 【MCP】国内主流MCP服务全景解析:技术生态与未来趋势
  • 蓝桥杯分享经验
  • ROS2 话题 topic 节点间传递数据信息的桥梁
  • DRIVEGPT4: 通过大语言模型实现可解释的端到端自动驾驶
  • R语言数据可视化
  • 使用Python将 Excel 中的图表、形状和其他元素导出为图片
  • 软件设计师“开发过程模型:瀑布、增量、原型、螺旋、喷泉、基于构件的开发模型、形式化方法模型、统一过程RUP、敏捷、极限”真题考点分析——求三连
  • 嵌入式(C语言篇)Day12
  • Blender cycles烘焙贴图笔记
  • 不赚“快钱”的佳沛:蒋时杰解密新西兰国果如何在中国“慢养”出43亿生意
  • 墨海军训练舰在纽约撞桥,墨总统:对遇难者表示悲痛,将跟进调查
  • 俄需要达成怎样的特别军事行动结果?普京:包含四个方面
  • 2024年全国博物馆接待观众14.9亿人次
  • 芬兰直升机相撞坠毁事故中五名人员全部遇难
  • 坚决打好产业生态培育攻坚战!陈吉宁调研奉贤区