【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
相关推荐
郝学胜-神的一滴1 小时前
Effective Python 条款 10 :海象运算符_=
开发语言·python·程序人生·开源
wuyk5551 小时前
Python零基础入门第十四章:异常处理(try-except)
开发语言·python
2601_962078192 小时前
Appium+Python+pytest自动化测试框架详解
自动化测试·python·appium·pytest·移动应用
卷无止境5 小时前
智能体开发环境ADE浅析,编程工具的下一次范式跃迁
后端·python
2601_962300819 小时前
机器学习贴士:使用Python编写MapReduce
hadoop·python·机器学习·mapreduce·数据处理
xyz_CDragon9 小时前
GitHub上4个爆款AI开源Skill:拍照后不用P图,用Codex一键生成高级海报(附效果图+使用教程)
人工智能·python·github·codex·skill
weixin199701080169 小时前
[特殊字符]《跨境二手ERP对接Back Market:标准化API + 7~10工作日技术合规审核实录》(附Python源码)
开发语言·python·pandas
持敬chijing10 小时前
Python-数据类型-列表
开发语言·python·青少年编程
2601_9623010111 小时前
Python环境搭建及PyCharm破解使用技巧
python·pycharm·环境搭建·避坑技巧·破解使用
2601_9620994612 小时前
Python中的find()函数:用法和示例
python·字符串·索引·子字符串·find函数