Django项目中Python跨目录模块导入失败问题求助
解决Django项目跨目录模块导入失败的问题
我来帮你搞定这个导入报错的问题!先理清楚你的项目结构,再一步步排查问题所在:
你的项目结构是这样的:
todoproject/ ├─ pythonDiscordChatbot/ │ └─ processLessons.py └─ todoapp/ └─ testChatFunctions.py
首先注意到一个细节:你报错里写的是from pythonDiscordChatbot.processLesson import *,但实际文件名是processLessons.py(末尾多了个s),这个拼写错误可能也是问题之一,先确认导入语句里的文件名和实际文件完全一致!
接下来分析你之前的方法为什么没生效:你用sys.path.append(os.path.abspath(os.path.join('..', 'pythonDiscordChatbot')))添加路径,但这个相对路径是相对于你运行脚本的工作目录,而不是脚本本身所在的目录。比如如果你是在todoapp文件夹下直接运行testChatFunctions.py,那..指向的路径可能并不是todoproject,自然找不到目标模块。
给你两个靠谱的解决方案:
方案一:用脚本自身路径动态添加(最可靠)
通过__file__获取当前脚本的绝对路径,这样不管你在哪里运行脚本,路径都是正确的:
import sys, os # 获取testChatFunctions.py所在的目录(也就是todoapp) current_script_dir = os.path.dirname(os.path.abspath(__file__)) # 拿到上一级目录(todoproject) project_root = os.path.dirname(current_script_dir) # 把pythonDiscordChatbot目录加到Python的模块搜索路径里 sys.path.append(os.path.join(project_root, 'pythonDiscordChatbot')) # 现在直接导入模块里的函数(注意文件名要正确!) from processLessons import routes routes("hello", "website_180.02.1")
方案二:把pythonDiscordChatbot变成可导入的包
- 先在
pythonDiscordChatbot文件夹里创建一个空的__init__.py文件——这会让Python把这个文件夹识别为一个合法的包。 - 确保你的终端工作目录是
todoproject(也就是包含两个子文件夹的根目录),然后运行testChatFunctions.py,这时候可以直接这样导入:
from pythonDiscordChatbot.processLessons import routes routes("hello", "website_180.02.1")
如果不想每次都切换工作目录,可以设置PYTHONPATH环境变量,把todoproject的绝对路径加进去:
- Windows命令行:
set PYTHONPATH=C:\Users\Kaij\Documents\chatSiteDjango\todoproject - 之后再运行你的脚本,Python就能自动找到
pythonDiscordChatbot包了。
内容的提问来源于stack exchange,提问作者Katie Melosto
相关产品推荐
相关产品推荐

