PyFlink基础示例添加map操作报找不到模块错误 仅PyCharm pyenv环境复现
问题原因分析
PyFlink的运行逻辑分两种场景,这是两种场景表现不同的核心原因:
- 仅包含读文件、打印等内置算子的任务:这类算子的逻辑完全由Flink Java端实现,PyFlink层仅负责任务提交,全程使用PyCharm为当前项目配置的、已安装pyflink的pyenv解释器,所以运行无异常。
- 新增map等包含用户自定义Python逻辑的算子的任务:此时Flink需要启动独立的Python Worker进程执行用户代码,默认会调用系统PATH中优先级最高的
python命令。PyCharm运行任务时不会默认将pyenv虚拟环境的bin目录提升到PATH最优先位置,导致实际调用的是未安装pyflink的全局Python解释器,因此抛出模块缺失报错。
解决方法
- 方法1:代码内显式指定Python解释器路径
在创建执行环境的逻辑后添加如下配置即可,路径替换为你所用pyenv虚拟环境的Python可执行文件完整路径(可在PyCharm项目解释器设置页直接复制):
env.set_python_executable("/home/user/.pyenv/versions/3.8.xx/envs/你的虚拟环境名/bin/python")
- 方法2:修改PyCharm运行配置,无需改动代码
- 点击右上角运行配置下拉框,选择「编辑配置」,找到对应测试脚本的运行项
- 找到「环境变量」配置栏,新增环境变量
PYFLINK_PYTHON_EXECUTABLE,值为pyenv虚拟环境的Python可执行文件完整路径即可。
也可以选择将pyenv虚拟环境的bin目录路径添加到PATH变量的最前端,和控制台直接运行时的环境保持一致,也能解决问题。
内容的提问来源于stack exchange,提问作者diegoruizbarbero
相关产品推荐
相关产品推荐

