Дублируйте встроенный модуль sqlite3 в другой, чтобы использовать более новую версию общей библиотеки sqlite3.

Я хотел бы использовать самую последнюю версию общей библиотеки sqlite3, напрямую скомпилированную из исходников с https://www.sqlite.org.

Перезапись /usr/lib/x86_64-linux-gnu/libsqlite3.so или libsqlite3.so.0.8.6 новой скомпилированной библиотекой кажется плохой идеей, потому что это может привести к поломке некоторых инструментов ОС, которые используют Python и стандартный модуль sqlite3 и которым не нравится новая версия этой общей библиотеки.

Вопрос: как я могу продублировать модуль sqlite3 stdlib Python в модуль с именем sqlite3custom, который вместо /usr/lib/python3.5/lib-dynload/_sqlite3.cpython-35m-x86_64-linux-gnu.so будет использовать /path/to/my/custom/sqlite.so?

Тогда я бы использовал import sqlite3custom в своем коде с точно таким же API, что и sqlite3, и это позволило бы избежать прикосновения к встроенному модулю sqlite3.

Преимущество: мы могли бы даже иметь оба в одном коде для сравнения:

import sqlite3
print(sqlite3.sqlite_version)        # 3.23.1
import sqlite3custom
print(sqlite3custom.sqlite_version)  # 3.36 (2021-06-18), compiled from source 

Примечание: это связано, но немного отличается от обновить sqlite3 Python в Debian и Несколько версий Sqlite3 для Python на одном сервере.


person Basj    schedule 21.07.2021    source источник


Ответы (1)


Я не думаю, что вы можете использовать обе версии библиотеки sqlite3 одновременно. Но, чтобы использовать несистемную библиотеку в своем коде python, вы можете просто обновить LD_LIBRARY_PATH (поместить папку, содержащую вашу версию, перед папкой с системной версией). В зависимости от того, как именно вы взаимодействуете с sqlite3, возможно, вам нужно будет обновить PATH аналогично.

person Nielk    schedule 21.07.2021