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