Вопрос

Есть ли способ заставить модуль 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 , чтобы сделать это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top