DLL-модули python
Есть ли способ сделать модуль python загружать dll в каталог приложения, а не версию, поставляемую с установкой python, без внесения изменений в установку python (для чего мне потребовалось бы сделать установщик и быть осторожным Я не нарушал другие приложения для людей, перезаписывая модули python и меняя версии dll globaly...)?
В частности, я хотел бы, чтобы python использовал мою версию sqlite3.dll, а не версию, поставляемую с python (которая старше и не имеет модуля fts3).
Ответы
Ответ 1
Хорошо, что python всегда загружает dll в тот же каталог, что и файл pyd, независимо от того, для чего установлены пути python и os.
Так что мне нужно было скопировать файл _sqlite3.pyd из python/v2.5/DLLS в каталог моих приложений, где находится новый sqlite3.dll, заставляя его загружать мою новую dll, а не ту, которая поставляется с python (поскольку pyd файлы, похоже, следуют за PYTHONPATH, даже если сами actaul dll не работают).
Ответ 2
Если вы говорите о библиотечных DLL-модулях Python, то просто изменить sys.path
должно быть хорошо. Однако, если вы говорите о DLL, связанных с этими DLL; то есть a libfoo.dll
, из которых a foo.pyd
зависит, тогда вам нужно изменить свою переменную среды PATH. Я писал о для этого для PyGTK некоторое время назад, но в вашем случае я думаю, что это должно быть так просто:
import os
os.environ['PATH'] = 'my-app-dir' + ';' + os.environ['PATH']
Это будет вставлять my-app-dir
во главе вашего пути Windows, который, я считаю, также контролирует загрузку для DLL.
Имейте в виду, что вам нужно будет сделать это перед загрузкой соответствующей DLL, то есть перед импортом чего-нибудь интересного.
sqlite3 может быть немного особенным, хотя, поскольку он распространяется с Python; это, очевидно, довольно сложно проверить это быстро, поэтому я специально не проверил sqlite3.dll
.
Ответ 3
Если ваша версия sqlite находится в sys.path до версии системы, она будет использовать это. Таким образом, вы можете либо поместить его в текущий каталог, либо изменить переменную среды PYTHONPATH
, чтобы сделать это.