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

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. 同样会成功!因为代码中动态添加了根目录路径。

http://www.xdnf.cn/news/7301.html

相关文章:

  • 【强化学习】#6 n步自举法
  • Blaster - Multiplayer P65-PXX : 射击武器
  • 吉林省建筑工程专业技术人员职称评审实施办法
  • (C语言)内存分配函数
  • 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 13.几何着色器(二)爆炸效果修改图元类型
  • BIM+GIS+loT 技术在大中型水库信息化建设中的融合应用
  • [模型优化] 1. 模型转换
  • SeleniumBase - 多合一浏览器自动化框架
  • python重庆旅游系统-旅游攻略
  • CSS 单位详解:px、rem、em、vw/vh 的区别与使用场景
  • day30-模块和库的导入
  • YOLOv8 在单片机上的几种部署方案
  • 贪心算法:多处最优服务次序、删数问题
  • 【WFAS】《Wild Face Anti-Spoofing Challenge 2023: Benchmark and Results》
  • 数据库存储空间告急?磁盘清理与归档策略全解析
  • ebpf程序入门编写
  • 使用 Flask 框架实现FTP,允许用户通过 Web 界面浏览和下载文件夹中的所有文件
  • Lombok
  • Docker 核心原理详解:Namespaces 与 Cgroups 如何实现资源隔离与限制
  • Better Faster Large Language Models via Multi-token Prediction 原理
  • Linux多进程 写时拷贝 物理地址和逻辑地址
  • 在嵌入式系统中, 一般链路层断开多久,断开TCP为好
  • GitHub排名第一的开源ERP项目:Odoo生产计划与执行的功能概述
  • 安装Anaconda后无jupyter解决方法
  • 【NLP】35. 构建高质量标注数据
  • HTTP 协议基础
  • DAY27
  • 【C语言基础语法入门】通过简单实例快速掌握C语言核心概念
  • Golang的Web应用架构设计
  • Python爬虫实战:获取国家统计网最新消费数据并分析,为从业者做参考