Python跨目录导入模块失败:找不到GameFunctions模块
解决不同目录下Python自定义模块导入失败的问题
你遇到的问题本质是Python解释器的模块搜索路径默认不包含上级目录,编辑器能识别是因为它自动把项目根目录加入了搜索索引,但运行时Python不认。下面是几种实用的解决办法:
方法1:临时添加上级目录到sys.path(快速测试用)
在game.py开头加上这段代码,把GameFunctions所在的上级目录手动加入Python的搜索路径:
import sys from pathlib import Path # 获取当前脚本的上级目录(也就是GameFunctions所在的目录) parent_dir = str(Path(__file__).parent.parent) if parent_dir not in sys.path: sys.path.append(parent_dir) # 现在就能正常导入了 from GameFunctions import *
这种方法不需要改目录结构,适合临时调试,但代码耦合性稍高。
方法2:把目录转为Python包(规范推荐)
这是更专业的做法,适合长期维护的项目:
- 在GameFunctions所在的根目录(也就是
etc的上级目录)创建一个空的__init__.py文件,让这个目录成为Python可识别的包。 - 根据运行方式选择导入方式:
- 如果从根目录运行脚本(比如执行
python -m etc.game),可以用相对导入:from ..GameFunctions import * - 或者用绝对导入(把根目录加入sys.path后):
这里的from your_package_name.GameFunctions import *your_package_name就是根目录的名字,比如你的项目根目录叫tes,就写from tes.GameFunctions import *。
- 如果从根目录运行脚本(比如执行
方法3:设置PYTHONPATH环境变量(全局生效)
把GameFunctions所在的目录加入系统的PYTHONPATH环境变量,这样所有Python脚本都会自动搜索这个目录:
- Windows:
命令行临时生效:
永久生效:右键「此电脑」→「属性」→「高级系统设置」→「环境变量」,新增PYTHONPATH变量,填入目标目录路径。set PYTHONPATH=D:\Projects\MyScripts\PYTHON\Test\tes - Linux/macOS:
命令行临时生效:
永久生效:把上述命令加入export PYTHONPATH=/path/to/your/root/directory~/.bashrc或~/.zshrc文件,重启终端后生效。
补充:为什么编辑器能识别但运行报错?
VS Code、PyCharm这类编辑器会自动扫描项目根目录,把它加入代码提示的搜索路径,所以能识别到模块;但Python解释器运行时只会使用默认的sys.path(当前脚本目录、标准库目录等),两者的搜索逻辑不一样,就会出现这种“编辑器认、运行报错”的情况。
内容的提问来源于stack exchange,提问作者MemeFox
相关产品推荐
相关产品推荐

