python - 自制 python@2 和 python 提供损坏的 sqlite3
问题描述
我正在使用最新版本的 macOS 和 homebrew,brew doctor 没有发现任何问题。我只是使用 brew install python, brew install python@2 来获取最新版本的 python。
当我输入 python -c "import sqlite3" 时,我收到以下错误消息:
python2.7 -c "import sqlite3"
130 ↵ Traceback(最近一次调用最后):文件“”,第 1 行,在文件“/usr/local/Cellar/python@2/2.7.15_2/Frameworks/Python.framework/版本/2.7/lib/python2.7/sqlite3/init.py”,第 24 行,从 dbapi2 导入 * 文件“/usr/local/Cellar/python@2/2.7.15_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sqlite3/dbapi2.py ",第 28 行,从 _sqlite3 导入 * ImportError: dlopen(/usr/local/Cellar/python@2/2.7.15_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_sqlite3 .so, 2): Symbol not found: _sqlite3_enable_load_extension 引用自:/usr/local/Cellar/python@2/2.7.15_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_sqlite3 .so 预期在:/usr/local/Cellar/python@2/2.7.15_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_sqlite3 中的 /usr/lib/libsqlite3.dylib 。所以python -c "import sqlite3"
1 ↵ Traceback(最近一次调用最后):文件“”,第 1 行,在文件“/usr/local/Cellar/python/3.7.2_1/Frameworks/Python.framework/Versions/3.7/ lib/python3.7/sqlite3/初始化.py”,第 23 行,从 sqlite3.dbapi2 导入 * 文件“/usr/local/Cellar/python/3.7.2_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/sqlite3/dbapi2.py ",第 27 行,从 _sqlite3 导入 * ImportError: dlopen(/usr/local/Cellar/python/3.7.2_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload/_sqlite3.cpython -37m-darwin.so,2):未找到符号:_sqlite3_enable_load_extension 引用自:/usr/local/Cellar/python/3.7.2_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload /_sqlite3.cpython-37m-darwin.so 预期在:/usr/local/Cellar/python/3.7.2_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7 中的 /usr/lib/libsqlite3.dylib /lib-dynload/_sqlite3.cpython-37m-darwin.so
什么可能导致问题?我尝试下载python源代码并编译它,并将_sqlite3.so或_sqlite3.cpython-37m-darwin.so文件移动到brew安装文件夹中,一切正常。brew 会不会忘记公式中的某些内容?除了从源代码编译 .so 文件并手动解决问题外,我还能做什么?
解决方案
我终于找到了错误隐藏的地方。我所有的 macOS 设备(包括 2 个 Pros 和 1 个 Air)都共享同一个 .zshrc 文件,出于某种原因,我添加了一个
export DYLD_LIBRARY_PATH="/Users/myname/Library/Developer/Xcode/iOS DeviceSupport/10.0.1 (14A403)/Symbols/usr/lib/:/usr/lib/"
破坏 python sqlite 共享库文件构建的文件,因为 sqlite 最近添加了一个名为“_sqlite3_enable_load_extension”的功能。
当我将 DYLD_LIBRARY_PATH 删除到过时的目录并 brew reinstall python 时,一切都很好。
顺便说一句,brew config 和 brew doctor 没有提供有关 DYLD_LIBRARY_PATH 的信息。下次我会遵守规则并提供这些信息。问题解决了!
推荐阅读
- android - 安排稍后执行的任务(时间+日期)android
- html - 如何使用简单的 HTML 表单将指标发布到 InfluxDB?
- c++ - OpenGL 纹理被镜像
- html - 概述 DIV 和图像
- google-apps-script - 从重复的电子表格运行 Google 脚本
- python - 我们可以对 K-Means 集群进行排名或为某些集群分配权重吗?
- html - 如何在struts中验证值
- javascript - 使用钩子处理 React 中的文件上传状态
- jenkins - 如何将 Jenkins 构建参数传递给 JMETER 属性变量
- r - 如何在 R 中构建一个函数,将变量拆分为区间并计算区间的平均值、标准差和计数