Python交互模式下从父目录导入模块失败,寻求解决方法
解决从父目录导入Python模块的问题
你当前处于tests目录,要导入上层modules目录里的模块,之前用__import__("../0-add_integer.py")的方式不对——__import__接收的是模块名而非文件路径,不能直接传带相对路径的文件地址。下面是两种可行的解决方法:
方法1:临时添加父目录到模块搜索路径
在Python交互模式里执行以下代码:
import sys sys.path.append("..") # 将父目录加入Python的模块搜索路径 from 0_add_integer import add_integer
之后就可以直接使用add_integer函数,或者赋值给new_method:
new_method = add_integer
方法2:使用importlib加载指定文件
如果不想修改sys.path,可以用importlib模块直接加载目标文件:
import importlib.util import os # 拼接父目录下的模块文件路径 module_file = os.path.join(os.path.dirname(os.getcwd()), "0-add_integer.py") # 创建模块规范 spec = importlib.util.spec_from_file_location("0_add_integer", module_file) # 加载模块 add_integer_mod = importlib.util.module_from_spec(spec) spec.loader.exec_module(add_integer_mod) # 获取目标函数 new_method = add_integer_mod.add_integer
注意事项
模块文件0-add_integer.py对应的合法模块名是0_add_integer(把横杠替换为下划线),直接写from 0-add_integer import ...会报错,因为Python标识符不允许包含横杠,所以要么用下划线形式的模块名,要么采用第二种importlib的加载方式。
内容的提问来源于stack exchange,提问作者Enwerem Melvin
相关产品推荐
相关产品推荐

