首页 > 解决方案 > 自制 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 文件并手动解决问题外,我还能做什么?

标签: pythonhomebrewhomebrew-cask

解决方案


我终于找到了错误隐藏的地方。我所有的 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 的信息。下次我会遵守规则并提供这些信息。问题解决了!


推荐阅读