Python跨脚本导入函数报错:ModuleNotFoundError问题求助
Python跨脚本导入函数报错:ModuleNotFoundError问题求助
嘿,我来帮你搞定这个模块导入的问题!先理清你的目录结构和当前问题的根源:
你的目录层级是:
.root ├── program │ └── main.py └── functions └── myfunctions.py
你之前把PYTHONPATH设为./root/functions,这其实是问题的核心——Python会在PYTHONPATH指定的路径下查找你要导入的模块/包,现在你把路径指向了functions目录本身,Python就会在这个目录里找名为functions的模块,可这里只有myfunctions.py,自然会报找不到的错误。
给你几个可行的解决方案,选适合你的就行:
方案1:修正PYTHONPATH环境变量
把PYTHONPATH设置为你的root目录(也就是包含program和functions的父目录),这样Python就能识别到functions是一个合法的包目录。
- 如果是Linux/macOS终端,临时设置可以用:
export PYTHONPATH="/path/to/your/root" - 如果是Windows命令行:
set PYTHONPATH=C:\path\to\your\root
设置完成后,你原来的导入语句from functions import myfunctions as func就能正常工作了。
方案2:在main.py中动态添加路径
如果不想修改环境变量,可以在main.py的最开头添加代码,把root目录加到Python的搜索路径里:
import sys import os # 获取当前main.py文件的绝对路径,再往上找一级就是root目录 root_directory = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(root_directory) # 现在就能正常导入了 from functions import myfunctions as func
这种方法的好处是不需要依赖环境变量,代码本身就能处理路径问题,移植性更强。
额外小提醒
虽然Python 3.3+支持无__init__.py的命名空间包,但如果导入还是有问题,可以在functions目录下创建一个空的__init__.py文件,帮Python明确识别这是一个包目录。
备注:内容来源于stack exchange,提问作者Pedro Alves
相关产品推荐
相关产品推荐

