2014-10-18 12 views
5

pyinstaller dağıtılabilir olarak oluşturmaya çalıştığım bir python uygulamasına sahibim. Benzer bir betik Linux üzerinde başarılı bir şekilde çalışır.Nasıl pyinstaller MSVC? 90.dll dosyasının doğru sürümlerini gösterir?

Windows 7 x64 üzerinde yapıyorum, ancak daha iyi uyumluluk için 32 bit ikili oluşturmak istiyorum, bu yüzden 32 bit python-2.7 kullanıyorum. Benim bağımlılıkları arasında MSVC gerektiren matplotlib ve pyside vardır. Microsoft'tan VCForPython27 adlı bir paket yüklüyorum.

Pyinstaller komut dosyasını çalıştırdığımda bir hatayla karşılaşıyorum. Şu mesajı alıyorum:

1250 INFO: Adding Microsoft.VC90.CRT to dependent assemblies of final executable 
7428 INFO: Searching for assembly x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none ... 
7428 WARNING: Assembly not found 
7428 ERROR: Assembly x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none not found 
7475 WARNING: lib not found: MSVCR90.dll dependency of C:\Python27\python.exe 
7553 INFO: Searching for assembly x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none ... 
7553 WARNING: Assembly not found 
7553 ERROR: Assembly x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none not found 
7662 WARNING: lib not found: MSVCR90.dll dependency of C:\Windows\system32\python27.dll 
7662 INFO: Analyzing C:\Python27\lib\site-packages\PyInstaller\loader\_pyi_boots 

hakkında böyle birden ileti vardır hem dosyalar MSVCP90.dll ve Msvcr90.dll

ben sürümlerini içeren bir klasörü C:\Windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2 sahip olduğunu görebilirsiniz

her iki dosyanın

Bu uyumsuzluk, python paketlerimi Christoph Gohlke's page ve pip ile yüklediğimde (eksik olan bağımlılıklar nedeniyle pip'le yüklenemediğim matplotlib hariç) oluşur.

Tuhaf bir şekilde pyinstaller bir ikili yapar.

WARNING: file already exists but should not: 
C:\Users\Martin\AppData\Local\Temp\_MEI34922\Include\pyconfig.h 

Herkes ben aşağıdakilerden herhangi birini biliyor mu: Ben çalıştırmayı denediğinizde Oysa ben bir pop-up diyerek olsun

  1. kıymetli x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none tertibatını monte? Bu belirli sürümü nereden alabilirim?
  2. Python'a, diğer sürüme bakmasını söyleyin (x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2)?
  3. pyconfig.h istenmeyen varlığı sorunu çözebilir mi? Hiçbir yere gitmiyor gibi görünüyor, ama ben de denemeliyim.
  4. Kodumu ikili olarak oluşturmanın başka bir yolunu buldunuz mu? Bu karmaşık bir kod, dış ikili dosyaları çalıştıran, ama eğer ben zorundayım eğer py2exe deneyin, daha iyi olsa da emin değilim.
+1

Pyconfig.h sorunu için bir geçici çözüm [here] (http://stackoverflow.com/questions/19055089/pyinstaller-onefile- uyarı-pyconfig-h-zaman-alma-scipy-ya da scipy-sinyal). – mapto

cevap

7

msvcr90.dll ve msvcp90.dll sürümünü 9.0.21022.8 içeren yeniden dağıtılabilir paketi, Microsoft web sitesinden here indirilebilir. Bu, PyInstaller'in istediği sürümleri bulmasına ve sonuçta elde edilen yürütülebilir dosyalara eklemesine yardımcı olacaktır.

İlginçtir, PyInstaller tarafından derlenen ve yeniden dağıtılabilir sürüm 9.0.30729.6161 ile derlenen yürütülebilir dosyayı çalıştırabiliyorum, sadece bu dosyaları paketlemeyeceğim. msvc*90.dll'leri dist dizinine kopyalamaya çalıştım, hatta manifest dosyalarını oluşturmayı ve değiştirmeyi denedim, ancak yine de python27.dll'dan bir hata alıyorum. Yeniden dağıtılabilir VC++ sürümünü yüklemek sorunu çözer, ancak paketim kendi kendini içermez. Keşke burada tam olarak ne olup bittiğini daha iyi anlayabilseydim ...