2008-10-18 27 views
16

bir piton modülü (o zaman ben bir yükleyici yapılan gerektirecek piton yüklemesine değişiklik yapmadan, başvurum dizinine yerine piton kurulumu ile birlikte gelen sürümünde bir dll yüklenmesi için bir yol var mı, ve dikkatli olun, python modüllerini aşırı yükleyerek ve dll versiyonlarını değiştirerek insanlar için başka uygulamaları kırmadım ...)?piton modülü dll'ler

Özellikle python'un python ile gelen sürümü yerine (daha eski ve fts3 modülüne sahip görünmüyor) sürümünü kullanmak için python'un sqlite3.dll sürümünü kullanmasını isterim.

cevap

6

Tamam o zaman piton dışarı denizkırlangıcı bakılmaksızın piton ve os yolları ayarlanır ne, PYD dosyasıyla aynı dizinde dll yükler.

Bu nedenle, python/v2.5/DLLS dosyasındaki _sqlite3.pyd dosyasını yeni sqlite3.dll dosyasının yer aldığı uygulama dizinine kopyalamam gerekiyordu, bu da python'la birlikte gelen yerine yeni dll'imi yükler. pyd dosyaları PYTHONPATH, actaul dlls kendileri olmasa bile takip ediyor gibi görünüyor).

+0

* pyd * dosyasının bulunduğu podhon'un başlatıldığı dizinden yüklenen farklı bir dizin oluşturulmuş bir * dll * var. Benim * PYD * yüklenmesi 'sys.path' mod yapabilir (Ama' os.getcwd() '. Matter görünmüyor) ama * dll * olduğu dir gelen Python başlamak zorunda. * Pyd * sonra * dll yükler * sadece çalışır. – n611x007

0

Eğer sqlite sürümünüz sys.path ise sistem versiyonunda bunu kullanacaktır. Yani bunu geçerli dizine koyabilir ya da bunu yapmak için PYTHONPATH ortam değişkenini değiştirebilirsiniz.

+0

Uygulamalarımdaki dll'yi python install dir üzerinden prioity almalıyım, ancak sqlite3 modülü hala dll'i python install dir'de kullanır, benimkinden daha çok kullanır. Ayrı bir dll yolu falan var mı? –

+0

Sadece dll'yi bu direye koydun mu yoksa python sarma kodunu da ekledin mi? Değilse, ikincisini deneyin. –

22

sonra basitçe sys.path modifiye iyi olmalı, Python modülü dll bahsediyoruz edin. Ancak, bu DLL'lere karşı bağlanmış DLL'lerinden bahsediyorsanız; yani, foo.pyd'un bağlı olduğu libfoo.dll, o zaman PATH ortam değişkeninizi değiştirmeniz gerekir. Ben doing this for PyGTK a while ago hakkında yazdım ama senin durumunda ben olduğunca basit olmalıdır düşünüyorum:

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

Ben de dll için yük sırasını kontrol eder inanıyoruz Windows yolunun, başındaki my-app-dir eklemek edeceğimizi.

ilginç bir şey almadan önce, yani söz, DLL yüklemeden önce bunu yapmak gerekir unutmayın. o Python ile dağıtılmaktadır beri

Sqlite3 olsa da, özel bir durum biraz olabilir; Bunu hızlı bir şekilde test etmek çok zor, bu yüzden özellikle sqlite3.dll'u kontrol etmedim.

+0

hala yeni dll yüklemiyor ... –

+0

Aranan ilk dizin (% PATH% önce) arama işlemini oluşturmak için kullanılan görüntü dosyasını içeren dizindir, LoadLibrary işlevi için MSDN bakın, ancak bu değiştirilebilir . Bu arada, .dll dosyalarını tartışıyorsunuz ama .pyd'yi unutma. – cdarke