AWS Glue中Gensim模块安装成功却提示找不到的问题求助
问题排查与解决方案
核心原因分析
从日志来看,尽管Glue显示Gensim安装成功,但ModuleNotFoundError说明实际安装的包不完整,或者Python解释器无法定位到该模块。结合你的情况,主要问题出在自定义wheel包的打包不完整,其次可能存在Python环境路径或依赖冲突的影响。
解决方案步骤
1. 重新打包完整的Gensim wheel包
你当前的setup.py仅指定packages=['gensim'],这只会打包根目录下的文件,而Gensim包含大量子模块(如gensim.models、gensim.utils等),这些子模块未被打包,导致安装后无法正常导入。
修改setup.py为:
from setuptools import setup, find_packages setup( name="gensim", version="4.1.0", packages=find_packages(), # 自动递归包含所有子包 install_requires=[ 'Cython', 'numpy', 'scipy', 'smart-open', 'urllib3<1.26' # 解决botocore版本冲突 ] )
然后在Python3.6环境下重新打包(Glue当前使用Python3.6,避免跨版本打包的兼容性问题):
python setup.py bdist_wheel
将新生成的wheel包重新上传到S3,替换原文件。
2. 确保Glue脚本能正确找到模块路径
如果重新打包后仍出现问题,可在Glue脚本开头手动添加第三方库的安装路径(Glue会将自定义库解压安装到/tmp/glue-python-libs-xxx目录下):
import sys import os # 遍历并添加Glue的自定义库路径 for dir_name in os.listdir('/tmp'): if dir_name.startswith('glue-python-libs-'): lib_path = os.path.join('/tmp', dir_name) sys.path.append(lib_path) print(f"Added library path: {lib_path}") # 再导入gensim import gensim
3. 验证依赖安装完整性
检查Glue日志中是否有依赖安装失败的记录,若存在部分依赖未安装,可将所有依赖包(Cython、numpy等)提前打包成wheel,一并上传到S3的Python library路径中,避免Glue在线下载时出现网络或版本问题。
补充说明
- 日志中的
urllib3版本冲突虽不直接导致Gensim无法导入,但可能破坏依赖环境的稳定性,通过在install_requires中指定urllib3<1.26可解决该冲突。 - 尽量在与Glue相同的Python版本环境下打包第三方库,避免字节码或依赖版本不兼容问题。
内容的提问来源于stack exchange,提问作者theHummingPavo
相关产品推荐
相关产品推荐

