Python项目中sendApp/receiveApp无法导入common模块,求解决方案
问题分析与解决方案
你的问题根源很明确:直接运行sendApp/sendApp.py或ReceiveApp/receiveApp.py时,Python会把脚本所在的子目录(比如testApp/sendApp)加入sys.path,但项目根目录testApp不在路径里,所以找不到common模块。
方案一:设置PYTHONPATH(可行且适配你的shell启动场景)
这是最直接的解决办法,完全符合你用shell脚本启动的需求:
- 在启动脚本里,先把
testApp的绝对路径添加到PYTHONPATH环境变量中,示例脚本(假设脚本放在testApp目录下):
这样所有子应用就能和# 将当前目录(testApp)加入Python路径 export PYTHONPATH=$(pwd):$PYTHONPATH # 启动各个子应用 python sendApp/sendApp.py python ReceiveApp/receiveApp.pyapp.py一样,直接用from common.example import whatever导入模块。
方案二:将项目转为可编辑安装包(更优的长期维护方案)
如果你的项目会持续迭代,推荐用这种方式,彻底解决模块导入问题:
- 在
testApp目录下创建pyproject.toml文件,内容如下:[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "testApp" version = "0.1.0" - 在
testApp目录下执行命令,以开发模式安装包:
安装完成后,无论你在哪个目录运行子应用,都能直接导入pip install -e .common模块,Python会自动识别项目结构,而且后续修改代码无需重新安装,非常适合开发阶段使用。
不推荐的做法
不要在子应用代码里硬编码修改sys.path(比如import sys; sys.path.append('../')),这种方式依赖脚本的运行目录,一旦启动路径变化就会报错,维护性很差。
内容的提问来源于stack exchange,提问作者newdeveloper
相关产品推荐
相关产品推荐

