【AI问答】python引入其他模块的对象

目录a/b/c.py

d/e/f.py

f该如何引入c中的对象

在给出的目录结构下:

text 复制代码
project_root/
├── a/
│   └── b/
│       └── c.py
└── d/
    └── e/
        └── f.py

f.针对 py 而言, 要是打算引入 c.py 里的对象, 可选方式存在好几种, 具体选择哪些方式须视你的项目结构情况, 以及你期望怎样去组织那代码而定。

方法一:使用绝对导入(推荐)

前提: a目录得是包(也就是说要包含.py文件), 或者, 该目录必须处于模块搜索路径里(像通过设置实现, 或借助sys.path添加达成), d目录同样如此, 要么是包包含.py文件, 要么得在模块搜索路径中, 通过设置或者用sys.path添加。

目录结构:

text 复制代码
project_root/
├── __init__.py
├── a/
│   └── b/
│       ├── __init__.py
│       └── c.py
└── d/
    └── e/
        ├── __init__.py
        └── f.py

f.py 中:

text 复制代码
from a.b.c import SomeObject  # 假设 c.py 中定义了 SomeObject

方法二:使用相对导入(不推荐)

通过文件系统里的相对位置来进行相对导入,一般不大建议用于跨目录的导入情形, 因为这样有可能致使代码在维护以及移植方面比较困难。

f.py 中:

text 复制代码
from ...a.b.c import SomeObject  # 三个点表示从当前文件向上三级

请注意, 相对导入的语法当中, 那表示向上三级目录的这种情况, 然而此方式在实际运用的时候极易出现错误, 并且它还依赖于文件系统的层次结构。

方法三:动态修改 sys.path

要是a以及d并非包, 又或者你并不打算运用包结构, 那么能够借由动态地对sys.path加以修改从而实现导入。

f.py 中:

text 复制代码
import sys
import os
# 获取项目根目录
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
# 将项目根目录添加到 sys.path
sys.path.insert(0, project_root)
# 现在可以导入 c.py 中的对象
from a.b.c import SomeObject

总结

推荐使用:

要是保证a目录以及它的子目录, 还有d目录以及它的子目录里都存有.py文件, 之后于f.py里采用绝对导入:

text 复制代码
from a.b.c import SomeObject
相关推荐
always_TT2 小时前
【Python requirements.txt 依赖管理】
开发语言·python
Logintern092 小时前
py文件开头为什么需要加:from __future__ import annotations
开发语言·python
bamb002 小时前
一个项目带你入门AI应用开发05
python
Python私教2 小时前
Django 6.1 邮件配置大改:旧项目如何平稳升级?
后端·python·django
Python私教2 小时前
Django 6.1 升级避坑:数据库版本不兼容怎么解决?
后端·python·django
Python私教2 小时前
Django 接口开发实测:新手还需要使用 REST 框架吗?
后端·python·django
名字还没想好☜3 小时前
Python concurrent.futures 实战:用 ThreadPoolExecutor 并发处理 + as_completed 收结果
数据库·python·php·并发
爱码小白3 小时前
importlib模块
开发语言·前端·python
axinawang3 小时前
第25课 for循环的应用
python