Python项目跨文件导入变量失败,求可复用解决方案
解决跨模块导入问题的通用方案
先把项目改成标准Python包结构
给你的目录补全必要文件,让Python能识别它为合法包,调整后结构如下:
你的项目根目录/ -- app/ -- -- __init__.py # 空文件即可,用来标识这是Python包 -- -- function/ -- -- -- __init__.py -- -- -- run.py -- -- constants.py -- pyproject.toml
配置pyproject.toml
在项目根目录新建pyproject.toml,写入以下内容:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "app" version = "0.1.0"
这个文件用于告知Python,这是一个可安装的正式包,方便后续在任意环境中复用。
以开发模式安装包
打开终端,进入项目根目录,执行以下命令:
pip install -e .
-e代表开发模式安装,修改代码后无需重新安装,变更会实时生效。
正常导入使用
现在在run.py里直接用绝对导入即可:
from app.constants import VARIABLE
无论你在哪个目录运行脚本,或是把这个项目复制到其他环境,只要安装了这个包,导入操作都能正常工作。
为啥之前的方法失败?
- 相对导入报错:直接运行
run.py时,Python会把function/当成顶层模块,无法识别上层的app包,因此相对导入找不到父级。 - 直接
from app.constants import ...报错:因为app不在Python的模块搜索路径中,Python找不到这个包。
这种标准包的方式完全符合Python规范,是能在多个项目复用的正规解决方案,而非临时hack。
内容的提问来源于stack exchange,提问作者arunavdey
相关产品推荐
相关产品推荐

