py2exe nie generuje pliku wykonywalnego

Używam Pythona 2.6 NA XP. Właśnie zainstalowałem py2exe i mogę z powodzeniem utworzyć proste hello.exe z a hello.py. jednak, kiedy próbuję użyć py2exe w moim prawdziwym programie, py2exe generuje kilka wiadomości informacyjnych, ale nie generuje niczego w folderze dist.

Mój setup.py wygląda tak:

from distutils.core import setup
import py2exe

setup(console=['ServerManager.py'])

A wyjście py2exe wygląda tak:

python setup.py py2exe
running py2exe
creating C:\DevSource\Scripts\ServerManager\build
creating C:\DevSource\Scripts\ServerManager\build\bdist.win32
   ...
   ...
creating C:\DevSource\Scripts\ServerManager\dist
*** searching for required modules ***
*** parsing results ***
creating python loader for extension 'wx._misc_' (C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_misc_.pyd -> wx._misc_.pyd)
creating python loader for extension 'lxml.etree' (C:\Python26\lib\site-packages\lxml\etree.pyd -> lxml.etree.pyd)
   ...
   ...
creating python loader for extension 'bz2' (C:\Python26\DLLs\bz2.pyd -> bz2.pyd)
*** finding dlls needed ***

Py2exe wydaje się znaleźć wszystkie moje import (choć byłem trochę zaskoczony, widząc win32 wymienione, jak nie importuję go wprost). Ponadto mój program uruchamia się całkiem szczęśliwie z tą komendą:

python ServerManager.py

Najwyraźniej robię coś zasadniczo złego, ale z powodu braku komunikatów o błędach z py2exe nie mam pojęcia co.

Author: Erik Allik, 2008-11-27

11 answers

I put this in all my setup.py Skrypty:

distutils.core.setup(
    options = {
        "py2exe": {
            "dll_excludes": ["MSVCP90.dll"]
        }
    },
    ...
)

To utrzymuje py2exe cicho, ale nadal musisz się upewnić, że dll jest na komputerze użytkownika.

 41
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-21 21:29:58

Odkryłem, że py2exe działa dobrze, jeśli skomentuję część mojego programu, która używa wxPython. Ponadto, gdy używam py2exe na 'prostej' próbce, która jest pobierana (np. w Python26\Lib \ site-packages \ py2exe \ samples \ simple), otrzymuję komunikat o błędzie:

*** finding dlls needed ***
error: MSVCP90.dll: No such file or directory

Coś o wxpythonie sprawia, że py2exe myśli, że potrzebuję biblioteki DLL Visual Studio 2008. Nie mam VS2008, a jednak mój program działa doskonale jako katalog modułów Pythona. Znalazłem kopię MSVCP90.DLL w sieci zainstalowano go w Python26 / DLLs, a py2exe teraz działa dobrze.

Nadal nie rozumiem skąd wzięła się ta zależność, ponieważ mogę uruchomić mój kod bez py2exe. Irytujące jest również to, że py2exe nie dał mi Komunikatu o błędzie, jak to miało miejsce w przypadku test_wx.py próbka.

Dalsza aktualizacja: kiedy próbowałem uruchomić wyjście py2exe na innym komputerze, odkryłem, że musi mieć MSVCR90.DLL zainstalowany; więc jeśli twój komputer docelowy nie ma Visual C++ 2008 już zainstalowany, polecam pobrać i zainstalować pakiet Redistributable Microsoft Visual C++ 2008 .

 40
Author: Charles Anderson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-18 21:26:52

WxPython nie ma z tym nic wspólnego. Przed Pythonem 2.6, Python używał Visual Studio 2003 jako kompilatora systemu Windows. Począwszy od wersji 2.6, przełączyli się na Visual Studio 2008, które wymaga pliku manifestu w niektórych sytuacjach. Zostało to dobrze udokumentowane. Zobacz następujące linki:

Http://wiki.wxpython.org/py2exe

Http://py2exe.org/index.cgi/Tutorial#Step52

Ponadto, jeśli tworzysz aplikację wxPython za pomocą py2exe, to chcesz ustawić parametr windows, a nie konsolowy. Może mój tutorial ci pomoże:

Http://www.blog.pythonlibrary.org/2010/07/31/a-py2exe-tutorial-build-a-binary-series/

 10
Author: Mike Driscoll,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-18 15:07:21

Wygląda na to, że jest to tylko zależność dla Pythona 2.6. Nie dostałem tego błędu pod 2.5, ale po aktualizacji jestem.

Ten wątek e-mail ma pewne tło, dlaczego problem istnieje i jak go naprawić:
http://www.nabble.com/py2exe,-Py26, - wxPython-and-dll-td20556399.html

Nie chciałem instalować vcredist. Moja aplikacja obecnie nie wymaga instalacji i może być uruchamiana przez osoby niebędące administratorami, co jest zachowaniem, którego nie chcę stracić. Więc Ja zgodnie z sugestiami w linkach i dostał niezbędne Microsoft. VC90. CRT. manifest i msvcr90.dll poprzez zainstalowanie Pythona "tylko dla tego użytkownika". Potrzebowałem również msvcp90.dll, który znalazłem w folderze WinSxS" wszyscy użytkownicy " Python 2.6 zainstalować. Ponieważ miałem już dwa z trzech, włączyłem msvcm90.dll, aby zapobiec przyszłym błędom, chociaż nie dostałem żadnych natychmiastowych błędów, gdy go pominąłem. Umieściłem manifest i trzy biblioteki DLL w folderze libs używanym przez moją zamrożoną aplikację.

The sztuczka, którą musiałem wykonać, polegała na dodaniu dodatkowej kopii manifestu i msvcr90.dll w katalogu głównym mojej aplikacji obok wygenerowanego przez py2exe pliku wykonywalnego. Ta kopia DLL jest używana do bootstrap aplikacji, ale wtedy wydaje się wyglądać tylko w folderze libs.

Miejmy nadzieję, że to odkrycie pomoże komuś innemu.

Miałem również ten sam problem z tym, że py2exe loguje prawdziwy komunikat o błędzie. Potem zdałem sobie sprawę, że stderr nie został przekierowany do mojego pliku dziennika. Dodaj ">build.log 2> & 1 " w wierszu poleceń, w którym wywołujesz py2exe.

 6
Author: resplin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-15 06:23:53
import sys

sys.path.append('C:\\WINDOWS\\WinSxS\\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2')

W każdym systemie Windows Plik MSVCP90.dll można znaleźć w podkatalogu C:\\WINDOWS\\WinSxS\\

W moim przypadku katalog był: x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2.

Przejdź do C:\\WINDOWS\\WinSxS\\ i użyj Windows file search, aby znaleźć MSVCP90.dll.

 6
Author: Egor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-25 08:54:26

Tylko dla twojej informacji, dla mnie działało kopiowanie plików

Microsoft. VC90. CRT. manifest msvcr90dll

Do katalogu z .exe na komputerze użytkownika (który nie ma zainstalowanej redystrybucji Pythona lub VC).

Dzięki za wszystkie wskazówki tutaj!

 3
Author: george,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-13 14:43:32

Wyjście mówi, że używasz WX. Spróbuj uruchomić py2exe ze skryptem określonym jako aplikacja GUI zamiast konsoli. Jeśli się nie mylę, to powoduje problemy z py2exe.

 1
Author: sli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-28 06:05:46

Spróbuj tego: http://www.py2exe.org/index.cgi/Tutorial#Step52

To działało dla mnie

 1
Author: Rahil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-10 17:38:41

Jest trochę informacji na wxPython wiki.

Wdrażanie aplikacji Pythona

Py2exe z wxPython i Python 2.6

 -1
Author: Werner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-12 09:35:53

Na moim win8. 1 nie znajduję ścieżki

C:/Program pliki / Microsoft Visual Studio 9.0/VC/redist / x86 / Microsoft.Vc90.CRT

Przeciwnie, dll znajduje się w

C:/WINDOWS/WinSxS/x86_Microsoft.VC90.CRT_XXXXXXX

XXX mogą się różnić w zależności od komputera

Możesz szukać w ścieżce, a następnie dodać ścieżkę w sobie setup.py

import sys
sys.path.append('C:/WINDOWS/WinSxS/x86_Microsoft.VC90.CRT_XXXXXXX')
 -1
Author: petitchamp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-21 21:20:54
import sys

sys.path.append('c:/Program Files/Microsoft Visual Studio 9.0/VC/redist/x86/Microsoft.VC90.CRT')
 -2
Author: umläute,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-10 17:51:14