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. 关键步骤 :在每个文件夹(subpackagesubsub)内新建一个空文件 __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 greet

def 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 greet

def 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, func2

if __name__ == "__main__":
    func1()  # 调用func1
    func2()  # 调用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. 同样会成功!因为代码中动态添加了根目录路径。

相关推荐
Tao____9 小时前
开源物联网平台
java·物联网·mqtt·开源·设备对接
计算机毕设匠心工作室9 小时前
【python大数据毕设实战】青少年抑郁症风险数据分析可视化系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习
后端·python
计算机毕设小月哥9 小时前
【Hadoop+Spark+python毕设】智能制造生产效能分析与可视化系统、计算机毕业设计、包括数据爬取、Spark、数据分析、数据可视化、Hadoop
后端·python·mysql
遇到困难睡大觉哈哈9 小时前
Harmony os——ArkTS 语言笔记(四):类、对象、接口和抽象类
java·笔记·spring·harmonyos·鸿蒙
拿破轮9 小时前
使用通义灵码解决复杂正则表达式替换字符串的问题.
java·服务器·前端
j***51899 小时前
Java进阶,时间与日期,包装类,正则表达式
java·mysql·正则表达式
whltaoin9 小时前
【 Web认证 】Cookie、Session 与 JWT Token:Web 认证机制的原理、实现与对比
前端·web·jwt·cookie·session·认证机制
Aerelin10 小时前
爬虫playwright入门讲解
前端·javascript·html·playwright
WZTTMoon10 小时前
Spring Boot 启动全解析:4 大关键动作 + 底层逻辑
java·spring boot·后端
章鱼哥73010 小时前
[特殊字符] SpringBoot 自定义系统健康检测:数据库、Redis、表统计、更新时长、系统性能全链路监控
java·数据库·redis