2008-10-18 104 views
16

有沒有辦法讓python模塊在我的應用程序目錄中加載dll,而不是python安裝附帶的版本,而不需要對python安裝進行更改(然後我需要安裝一個安裝程序,並小心我沒有打破其他應用程序的人通過覆蓋python模塊和更改dll版本globaly ...)?python模塊dlls

具體而言,我希望python使用我的版本的sqlite3.dll,而不是與python(這是舊的,似乎沒有fts3模塊)附帶的版本。

回答

6

確定它出來python總是將dll加載到與pyd文件相同的目錄中,而不管python和os路徑設置爲什麼。

因此,我需要將_sqlite3.pyd從python/v2.5/DLLS複製到我的apps目錄中新建的sqlite3.dll所在的位置,使其加載我的新dll,而不是python自帶的pyd文件似乎遵循PYTHONPATH,儘管actaul dlls本身不)。

0

如果你的sqlite版本是在sys.path 之前的系統版本,它會使用它。所以你可以把它放在當前目錄下,或者改變環境變量PYTHONPATH來做到這一點。

+0

我確實把dll放在我的應用程序目錄中,這應該對python安裝目錄有瑕疵,但sqlite3模塊仍然使用python安裝目錄中的dll,而不是我的。有沒有一個單獨的DLL路徑或什麼? – 2008-10-18 10:24:18

+0

你只是把dll放到那個目錄下,或者你是否還在裏面添加了python包裝代碼?如果不是,請嘗試後者。 – 2008-10-18 10:30:06

22

如果您在談論Python模塊DLL,那麼只需修改sys.path應該沒問題。但是,如果您正在討論針對這些DLL鏈接的鏈接;即libfoo.dll其中foo.pyd依賴,那麼你需要修改你的PATH環境變量。我寫了一篇關於doing this for PyGTK a while ago,但在你的情況下,我覺得應該是這麼簡單:

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

,將在您的Windows路徑,我相信也控制加載順序的DLL的頭插入my-app-dir

請記住,在加載有問題的DLL之前,即在導入任何有趣的內容之前,您需要執行此操作。但是,由於它是用Python分發的,sqlite3可能有些特殊情況,快速測試它顯然有點棘手,所以我沒有特別檢查sqlite3.dll

+0

仍然不會加載新的dll ... – 2008-10-18 10:59:58