You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何从b.py导入c.py?无需移动文件或绝对路径

Python跨文件导入方案(不移动文件/不用绝对路径)

当然有可行的方案!我来给你梳理几种实用的方法,都不需要移动文件或者硬编码绝对路径,适配不同的项目场景:

方法1:临时添加目录到sys.path(快速调试首选)

如果只是临时需要导入,或者项目结构比较简单,可以在b.py里动态把目标文件所在的父目录加入Python的模块搜索路径。

举个例子,假设你的项目结构是这样:

my_project/
├── src/
│   └── b.py
└── utils/
    └── c.py

在b.py里可以这么写:

import sys
from pathlib import Path

# 获取当前脚本所在目录的父级目录(也就是my_project根目录)
project_root = Path(__file__).parent.parent
# 把根目录加入模块搜索路径
sys.path.append(str(project_root))

# 现在就能正常导入c.py了
from utils import c

这里用Path(__file__)是为了跨平台兼容(不管Windows还是Linux/macOS都能正确识别路径),避免手动写路径分隔符的麻烦。

方法2:将项目转为可导入包(长期项目推荐)

如果是长期维护的项目,更规范的做法是把项目变成Python可识别的包结构,只需要在每个需要作为包的目录下添加一个空的__init__.py文件(Python 3.3+其实可以不用,但加了兼容性更好)。

还是以上面的结构为例,添加__init__.py后:

my_project/
├── __init__.py
├── src/
│   ├── __init__.py
│   └── b.py
└── utils/
    ├── __init__.py
    └── c.py

之后运行b.py时,要从项目根目录(my_project)出发,用模块方式运行:

python -m src.b

这时在b.py里就有两种导入方式可选:

  • 绝对导入(更清晰,推荐):
    from utils import c
    
  • 相对导入(适合包内部的模块引用):
    from ..utils import c
    

⚠️ 注意:相对导入只能在包内部使用,不能直接双击运行b.py或者用python src/b.py这种方式执行,必须用-m参数以模块形式启动。

方法3:利用PYTHONPATH环境变量(无需修改代码)

如果不想修改任何代码,可以在运行脚本前,把项目根目录添加到PYTHONPATH环境变量中,Python会自动把这个路径加入模块搜索列表。

  • Windows命令行:
    set PYTHONPATH=C:\路径\到\my_project
    python src/b.py
    
  • Linux/macOS终端:
    export PYTHONPATH=/路径/到/my_project
    python src/b.py
    

这种方法适合临时调试,不用改动代码,重启终端后环境变量会重置。

内容的提问来源于stack exchange,提问作者guppythegod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:19:13