23

Pythonのインストールに変更を加えることなく、Pythonのインストールに付属するバージョンではなく、私のアプリケーションディレクトリにPythonモジュールがdllをロードするようにする方法はありますか? Python モジュールを上書きし、dll のバージョンをグローバルに変更することで、他のアプリを壊すことはありません...)?

具体的には、pythonに付属のバージョン(古くてfts3モジュールがないようです)ではなく、自分のバージョンのsqlite3.dllをpythonに使用してもらいたいと思います。

4

5 に答える 5

32

PythonモジュールDLLについて話している場合は、単に変更するだけsys.pathで問題ありません。ただし、それらのDLLに対してリンクされたDLLについて話している場合。つまり、libfoo.dllaがfoo.pyd依存している場合は、PATH環境変数を変更する必要があります。少し前にPyGTKでこれを行うことについて書きましたが、あなたの場合は次のように簡単にすべきだと思います。

import os
os.environ['PATH'] = 'my-app-dir' + os.pathsep + os.environ['PATH']

これにより、Windowsパスの先頭に挿入my-app-dirされます。これは、DLLのロード順序も制御すると思います。

問題のDLLをロードする前、つまり、興味深いものをインポートする前に、これを行う必要があることに注意してください。

ただし、sqlite3はPythonで配布されているため、少し特殊なケースになる可能性があります。これをすばやくテストするのは明らかに難しいので、sqlite3.dll具体的には確認していません。

于 2008-10-18T10:33:08.000 に答える
7

わかりました。PythonとOSのパスが何に設定されているかに関係なく、Pythonは常にpydファイルと同じディレクトリにdllをロードします。

したがって、_sqlite3.pydをpython / v2.5 / DLLSから新しいsqlite3.dllがあるappsディレクトリにコピーして、pythonに付属しているものではなく新しいdllをロードする必要がありました(pydファイルは実際のdll自体はそうではありませんが、PYTHONPATHに従う必要があります)。

于 2008-10-18T11:04:43.690 に答える
0

お使いのバージョンの sqlite が sys.path にある場合、システム バージョンよりも前にそれが使用されます。そのため、現在のディレクトリに配置するか、PYTHONPATH環境変数を変更してそれを行うことができます。

于 2008-10-18T10:20:18.850 に答える