You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo13导入pysftp报bcrypt PyInt_FromLong未定义符号错误

问题背景

在Linux服务器执行pip install pysftp命令安装pysftp库,用于Odoo13自定义模块的功能开发,安装完成后服务运行时触发导入错误。此前已开展多轮排查验证,包括将虚拟环境Python版本从2.7切换至3.6,所有尝试均未解决问题。

运行环境信息
  • Python版本:3.6.9
  • Pip版本:20.3.4
核心错误提示

ImportError: /usr/lib/python3.6/bcrypt/_bcrypt.so: undefined symbol: PyInt_FromLong

完整错误日志
Traceback (most recent call last):
  File "/odoo/odoo-server/odoo/modules/registry.py", line 87, in new
    odoo.modules.load_modules(registry._db, force_demo, status, update_module)
  File "/odoo/odoo-server/odoo/modules/loading.py", line 424, in load_modules
    force, status, report, loaded_modules, update_module, models_to_check)
  File "/odoo/odoo-server/odoo/modules/loading.py", line 315, in load_marked_modules
    perform_checks=perform_checks, models_to_check=models_to_check
  File "/odoo/odoo-server/odoo/modules/loading.py", line 182, in load_module_graph
    load_openerp_module(package.name)
  File "/odoo/odoo-server/odoo/modules/module.py", line 404, in load_openerp_module
    __import__('odoo.addons.' + module_name)
  File "/odoo/custom/addons/hr_zk_attendance/__init__.py", line 22, in <module>
    from . import models
  File "/odoo/custom/addons/hr_zk_attendance/models/__init__.py", line 22, in <module>
    from . import zk_machine
  File "/odoo/custom/addons/hr_zk_attendance/models/zk_machine.py", line 62, in <module>
    import pysftp
  File "/usr/local/lib/python3.6/dist-packages/pysftp/__init__.py", line 12, in <module>
    import paramiko
  File "/usr/local/lib/python3.6/dist-packages/paramiko/__init__.py", line 22, in <module>
    from paramiko.transport import SecurityOptions, Transport
  File "/usr/local/lib/python3.6/dist-packages/paramiko/transport.py", line 91, in <module>
    from paramiko.dsskey import DSSKey
  File "/usr/local/lib/python3.6/dist-packages/paramiko/dsskey.py", line 37, in <module>
    from paramiko.pkey import PKey
  File "/usr/local/lib/python3.6/dist-packages/paramiko/pkey.py", line 31, in <module>
    import bcrypt
  File "/usr/lib/python3.6/bcrypt/__init__.py", line 25, in <module>
    from bcrypt import _bcrypt
ImportError: /usr/lib/python3.6/bcrypt/_bcrypt.so: undefined symbol: PyInt_FromLong
2022-07-13 13:30:00,117 6671 INFO visiomate_test werkzeug: 139.135.36.87 - - [13/Jul/2022 13:30:00] "GET /favicon.ico HTTP/1.1" 500 - 10 0.003 0.288
2022-07-13 13:30:00,122 6671 ERROR visiomate_test werkzeug: Error on request:
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/werkzeug/serving.py", line 270, in run_wsgi
    execute(self.server.app)
  File "/usr/local/lib/python3.6/dist-packages/werkzeug/serving.py", line 258, in execute
    application_iter = app(environ, start_response)
  File "/odoo/odoo-server/odoo/service/server.py", line 440, in app
    return self.app(e, s)
  File "/odoo/odoo-server/odoo/service/wsgi_server.py", line 142, in application
    return application_unproxied(environ, start_response)
  File "/odoo/odoo-server/odoo/service/wsgi_server.py", line 117, in application_unproxied
    result = odoo.http.root(environ, start_response)
  File "/odoo/odoo-server/odoo/http.py", line 1288, in __call__
    return self.dispatch(environ, start_response)
  File "/odoo/odoo-server/odoo/http.py", line 1258, in __call__
    return self.app(environ, start_wrapped)
  File "/usr/local/lib/python3.6/dist-packages/werkzeug/wsgi.py", line 766, in __call__
    return self.app(environ, start_response)
  File "/odoo/odoo-server/odoo/http.py", line 1457, in dispatch
    odoo.registry(db).check_signaling()
  File "/odoo/odoo-server/odoo/__init__.py", line 104, in registry
    return modules.registry.Registry(database_name)
  File "/odoo/odoo-server/odoo/modules/registry.py", line 63, in __new__
    return cls.new(db_name)
  File "/odoo/odoo-server/odoo/modules/registry.py", line 87, in new
    odoo.modules.load_modules(registry._db, force_demo, status, update_module)
  File "/odoo/odoo-server/odoo/modules/loading.py", line 424, in load_modules
    force, status, report, loaded_modules, update_module, models_to_check)
  File "/odoo/odoo-server/odoo/modules/loading.py", line 315, in load_marked_modules
    perform_checks=perform_checks, models_to_check=models_to_check
  File "/odoo/odoo-server/odoo/modules/loading.py", line 182, in load_module_graph
    load_openerp_module(package.name)
  File "/odoo/odoo-server/odoo/modules/module.py", line 404, in load_openerp_module
    __import__('odoo.addons.' + module_name)
  File "/odoo/custom/addons/hr_zk_attendance/__init__.py", line 22, in <module>
    from . import models
  File "/odoo/custom/addons/hr_zk_attendance/models/__init__.py", line 22, in <module>
    from . import zk_machine
  File "/odoo/custom/addons/hr_zk_attendance/models/zk_machine.py", line 62, in <module>
    import pysftp
  File "/usr/local/lib/python3.6/dist-packages/pysftp/__init__.py", line 12, in <module>
    import paramiko
  File "/usr/local/lib/python3.6/dist-packages/paramiko/__init__.py", line 22, in <module>
    from paramiko.transport import SecurityOptions, Transport
  File "/usr/local/lib/python3.6/dist-packages/paramiko/transport.py", line 91, in <module>
    from paramiko.dsskey import DSSKey
  File "/usr/local/lib/python3.6/dist-packages/paramiko/dsskey.py", line 37, in <module>
    from paramiko.pkey import PKey
  File "/usr/local/lib/python3.6/dist-packages/paramiko/pkey.py", line 31, in <module>
    import bcrypt
  File "/usr/lib/python3.6/bcrypt/__init__.py", line 25, in <module>
    from bcrypt import _bcrypt
ImportError: /usr/lib/python3.6/bcrypt/_bcrypt.so: undefined symbol: PyInt_FromLong - - -
故障根因

PyInt_FromLong是Python2专属的C层API符号,Python3中该符号已被替换为PyLong_FromLong。报错说明当前Python3环境加载到的bcrypt二进制动态库文件是针对Python2编译的,版本不兼容。从错误路径看,当前加载的是系统全局路径/usr/lib/python3.6/下的bcrypt,属于Python2版本安装残留,或Python3环境的包搜索路径优先级错误,优先加载了非兼容版本的系统包。

解决步骤
  • 清理所有环境下的冲突bcrypt安装包
    先卸载系统apt源安装的bcrypt包:
    sudo apt remove -y python-bcrypt python3-bcrypt
    再反复执行pip卸载命令,清除全局、用户目录下残留的bcrypt包,直到提示未找到对应安装包为止:
    pip uninstall -y bcrypt && pip3 uninstall -y bcrypt
  • 确认Odoo运行环境隔离性
    激活Odoo使用的Python3.6虚拟环境,执行which python和which pip,确认返回路径指向虚拟环境目录下的bin/文件夹,而非/usr/bin下的全局Python路径,避免服务启动时混用全局包。
  • 安装版本兼容的依赖包
    Python3.6最高支持bcrypt 3.2.2版本,过高版本会出现兼容性问题,在激活的虚拟环境内执行以下命令安装适配版本的依赖链:
    pip install bcrypt==3.2.2 paramiko==2.12.0 pysftp==0.2.9
  • 验证修复效果
    先在虚拟环境内执行python -c "import pysftp",无任何输出即代表导入链路正常,之后重启Odoo服务即可正常加载自定义模块。

内容的提问来源于stack exchange,提问作者Osama Hassan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:36:19