Python项目中如何从Start目录导入bxx.py模块?
解决Python项目跨目录导入变量的方案
先明确你的项目结构:
Start/ ├── b23.py ├── b55.py ├── Data/ │ ├── kaso/ │ └── classes/ │ └── app.py
以下是几种可行的解决方法:
方法1:手动添加项目根目录到Python路径
在app.py开头加入代码,把Start目录的绝对路径添加到Python的模块搜索路径中,之后就能直接导入bxx.py里的变量:
import sys from pathlib import Path # 定位到Start目录:app.py的路径是Data/classes,往上两级就是Start start_root = Path(__file__).parent.parent.parent sys.path.append(str(start_root)) # 导入所需变量 from b23 import target_var from b55 import another_var
方法2:将Start转为可导入包并使用绝对导入
- 在
Start目录下创建一个空的__init__.py文件,让Python把它识别为合法包。 - 在
app.py中使用绝对导入:
from Start.b23 import target_var from Start.b55 import another_var
- 运行
app.py时,确保从Start的父目录执行命令:
python -m Data.classes.app
方法3:使用相对导入(需以包方式运行)
如果不想修改路径,可通过相对导入实现,但必须以包的形式运行app.py:
- 确保
Start和Data目录下都有__init__.py文件(空文件即可)。 - 在
app.py中使用相对导入:
# 往上两级目录导入b23和b55 from ... import b23 from ... import b55 # 使用变量 print(b23.target_var)
- 从
Start的父目录运行命令:
python -m Data.classes.app
注意:直接双击或用python Data/classes/app.py运行脚本时,相对导入会失效,因为此时app.py被当作独立脚本而非包的一部分。
内容的提问来源于stack exchange,提问作者khole02
相关产品推荐
相关产品推荐

