Pertanyaan py2exe gagal menghasilkan yang dapat dieksekusi


Saya menggunakan python 2.6 di XP. Saya baru saja menginstal py2exe, dan saya berhasil membuat hello.exe sederhana dari hello.py. Namun, ketika saya mencoba menggunakan py2exe pada program saya yang sebenarnya, py2exe menghasilkan beberapa pesan informasi tetapi gagal menghasilkan apa pun di folder dist.

Setup.py saya terlihat seperti ini:

from distutils.core import setup
import py2exe

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

dan output py2exe terlihat seperti ini:

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 tampaknya telah menemukan semua impor saya (meskipun saya agak terkejut melihat win32 disebutkan, karena saya tidak secara eksplisit mengimpornya). Juga, program saya dijalankan dengan cukup gembira dengan perintah ini:

python ServerManager.py

Jelas saya melakukan sesuatu yang salah secara mendasar, tetapi karena tidak adanya pesan kesalahan dari py2exe, saya tidak tahu apa.


51
2017-11-27 10:31


asal


Jawaban:


Saya taruh ini di semua skrip setup.py saya:

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

Ini membuat py2exe tenang, tetapi Anda masih perlu memastikan bahwa dll ada di komputer pengguna.


41
2018-04-21 21:29



Saya telah menemukan bahwa py2exe bekerja dengan baik jika saya mengomentari bagian dari program saya yang menggunakan wxPython. Juga, ketika saya menggunakan py2exe pada sampel 'sederhana' yang datang dengan unduhannya (yaitu di Python26 \ Lib \ site-packages \ py2exe \ samples \ simple), saya mendapatkan pesan kesalahan ini:

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

Jadi sesuatu tentang wxPython membuat py2exe berpikir saya membutuhkan Visual Studio 2008 DLL. Saya tidak memiliki VS2008, namun program saya bekerja dengan baik sebagai direktori modul Python. Saya menemukan salinan MSVCP90.DLL di web, menginstalnya di Python26 / DLL, dan py2exe sekarang berfungsi dengan baik.

Saya masih tidak mengerti dari mana ketergantungan ini berasal, karena saya dapat menjalankan kode saya dengan sempurna tanpa py2exe. Ini juga menjengkelkan bahwa py2exe tidak memberi saya pesan kesalahan seperti yang dilakukannya dengan sampel test_wx.py.

Pembaruan lebih lanjut: Ketika saya mencoba menjalankan output dari py2exe pada PC lain, saya menemukan bahwa perlu menginstal MSVCR90.DLL; jadi jika PC target Anda belum mendapat Visual C ++ 2008 sudah terinstal, saya sarankan Anda mengunduh dan menginstal Microsoft Visual C ++ 2008 Paket Redistributable.


40
2017-11-28 10:36



wxPython tidak ada hubungannya dengan itu. Sebelum Python 2.6, Python menggunakan Visual Studio 2003 sebagai kompiler Windows mereka. Mulai dengan 2.6, mereka beralih ke Visual Studio 2008, yang membutuhkan file manifes dalam beberapa situasi. Ini telah didokumentasikan dengan baik. Lihat tautan berikut:

http://wiki.wxpython.org/py2exe

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

Juga, jika Anda membuat aplikasi wxPython dengan py2exe, maka Anda ingin mengatur parameter windows, BUKAN yang konsol. Mungkin tutorial saya akan membantu Anda:

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


10
2017-11-18 15:07



Sepertinya ini hanya ketergantungan untuk Python 2.6. Saya tidak mendapatkan kesalahan ini di bawah 2,5, tetapi setelah peningkatan saya.

Utas email ini memiliki beberapa latar belakang mengapa masalah ada dan cara memperbaikinya:
http://www.nabble.com/py2exe,-Py26,-wxPython-and-dll-td20556399.html

Saya tidak ingin menginstal vcredist. Aplikasi saya saat ini tidak memerlukan instalasi dan dapat dijalankan oleh non-administrator, yang merupakan perilaku yang tidak ingin saya hilangkan. Jadi saya mengikuti saran di tautan dan mendapatkan Microsoft.VC90.CRT.manifest dan msvcr90.dll yang diperlukan dengan memasang Python "hanya untuk pengguna ini". Saya juga membutuhkan msvcp90.dll yang saya temukan di folder WinSxS dari "semua pengguna" menginstal Python 2.6. Karena saya sudah memiliki dua dari tiga, saya menyertakan msvcm90.dll untuk mencegah kesalahan di masa depan meskipun saya tidak mendapatkan kesalahan langsung ketika saya meninggalkannya. Saya meletakkan manifes dan tiga DLL di folder libs yang digunakan oleh aplikasi beku saya.

Trik saya harus melakukan itu termasuk salinan tambahan manifes dan msvcr90.dll di root folder aplikasi saya di samping oleh py2exe yang dihasilkan dieksekusi. Salinan DLL ini digunakan untuk mem-bootstrap aplikasi, tetapi kemudian tampaknya hanya melihat di folder libs.

Semoga penemuan itu membantu orang lain keluar.

Juga, saya memiliki masalah yang sama dengan memiliki py2exe log pesan kesalahan nyata. Kemudian saya menyadari bahwa stderr tidak dialihkan ke file log saya. Tambahkan "> build.log 2> & 1" pada baris perintah di mana Anda menjalankan py2exe.


6
2017-10-15 03:37



import sys

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

Pada setiap Windows, Anda dapat menemukan file tersebut MSVCP90.dll di beberapa subdirektori di C:\\WINDOWS\\WinSxS\\ 

Dalam kasus saya, direktori adalah: x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2.

Pergi ke C:\\WINDOWS\\WinSxS\\ dan gunakan pencarian file windows untuk menemukan MSVCP90.dll.


6
2017-09-25 06:37



Hanya untuk info Anda, bagi saya itu berfungsi untuk menyalin file

Microsoft.VC90.CRT.manifest msvcr90.dll

ke dalam direktori dengan .exe pada mesin pengguna (yang tidak memiliki python atau VC redistributable installed).

Terima kasih untuk semua petunjuknya di sini!


3
2018-04-13 14:43



Outputnya mengatakan Anda menggunakan WX. Coba jalankan py2exe dengan skrip Anda yang ditentukan sebagai aplikasi GUI, bukan konsol. Jika saya tidak salah, itu cenderung menyebabkan masalah dengan py2exe.


1
2017-11-28 06:05