python的包引入

Python模块导入的基本原理:

当您在Python中导入模块时,Python会按照以下顺序搜索模块路径:

  • 当前脚本所在的目录(或称工作目录)
  • 环境变量 PYTHONPATH 指定的目录
  • 标准库和第三方库的安装目录

创建如下结构

my_project/

├── main.py

├── package_a/

│ ├── init.py

│ ├── module_a1.py

│ └── module_a2.py

└── package_b/

├── init.py

└── module_b1.py

文件内容:

  • package_a/module_a1.py

    def function_a1():

    print("Function A1 from Module A1")

  • package_a/module_a2.py

    from .module_a1 import function_a1

    def function_a2():

    print("Function A2 from Module A2")

    function_a1()

  • package_b/module_b1.py

    from package_a.module_a1 import function_a1

    def function_b1():

    print("Function B1 from Module B1")

    function_a1()

  • main.py

    from package_a.module_a2 import function_a2

    from package_b.module_b1 import function_b1

    function_a2()

    function_b1()

上面的main是可以运行成功的,但是如果你在其中

from ../a/a1 import function_a1

就会报错

这是因为

import 语句的语法限制:

  • import 语句中,您需要使用模块名或包名 ,而不是文件系统路径。

    .和..只能在包内部使用,比如a2中导入a1的方法

也可以通过在 main.py 的顶部手动修改 sys.path,但这通常不被推荐,因为它会导致代码的可移植性和可维护性降低。

复制代码
import sys
import os

# 将上级目录添加到 sys.path
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from a.a1 import function_a1

function_a1()
相关推荐
IVEN_13 小时前
只会Python皮毛?深入理解这几点,轻松进阶全栈开发
python·全栈
Ray Liang14 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
AI攻城狮14 小时前
如何给 AI Agent 做"断舍离":OpenClaw Session 自动清理实践
python
千寻girling14 小时前
一份不可多得的 《 Python 》语言教程
人工智能·后端·python
AI攻城狮17 小时前
用 Playwright 实现博客一键发布到稀土掘金
python·自动化运维
曲幽18 小时前
FastAPI分布式系统实战:拆解分布式系统中常见问题及解决方案
redis·python·fastapi·web·httpx·lock·asyncio
孟健1 天前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
码路飞1 天前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
曲幽2 天前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers