Saat ini saya mencoba membuat file yang dapat dieksekusi menggunakan py2exe. Saya menggunakan Python 3.6. Skrip yang saya gunakan impor openpyxl
dan pptx
dan berjalan dengan baik ketika saya menggunakan Pycharm atau menjalankan skrip menggunakan jendela perintah.
Output menghasilkan kesalahan:
IndexError: tuple index out of range
Di bawah ini Anda dapat menemukan cmd
hasilnya:
C:\Python36>python setup.py py2exe
running py2exe
Traceback (most recent call last):
File "setup.py", line 4, in <module>
setup(console=['Storybookmaker.py'])
File "C:\Python36\lib\distutils\core.py", line 148, in setup
dist.run_commands()
File "C:\Python36\lib\distutils\dist.py", line 955, in run_commands
self.run_command(cmd)
File "C:\Python36\lib\distutils\dist.py", line 974, in run_command
cmd_obj.run()
File "C:\Python36\lib\site-packages\py2exe\distutils_buildexe.py", line 188, in run
self._run()
File "C:\Python36\lib\site-packages\py2exe\distutils_buildexe.py", line 267, in _run
builder.analyze()
File "C:\Python36\lib\site-packages\py2exe\runtime.py", line 160, in analyze
self.mf.import_hook(modname)
File "C:\Python36\lib\site-packages\py2exe\mf3.py", line 120, in import_hook
module = self._gcd_import(name)
File "C:\Python36\lib\site-packages\py2exe\mf3.py", line 274, in _gcd_import
return self._find_and_load(name)
File "C:\Python36\lib\site-packages\py2exe\mf3.py", line 357, in _find_and_load
self._scan_code(module.__code__, module)
File "C:\Python36\lib\site-packages\py2exe\mf3.py", line 388, in _scan_code
for what, args in self._scan_opcodes(code):
File "C:\Python36\lib\site-packages\py2exe\mf3.py", line 417, in _scan_opcodes
yield "store", (names[oparg],)
IndexError: tuple index out of range
C:\Python36>
Apa penyebabnya IndexError
?
Edit: ini setup.py
filenya:
from distutils.core import setup
import py2exe
setup(console=['Storybookmaker.py'])
setup.py
file Anda ? karena masalahnya ada dan bukan dipy2exe
mana yang berfungsi dengan baik.Storybookmaker.py
file dalam direktori yang sama dengansetup.py
? Anda dapat mencobasetup(console=[os.path.join(os.path.dirname(__file__,'Storybookmaker.py')])
untuk menemukan file tersebut.Jawaban:
Python 3.6 sepenuhnya mendesain ulang bytecode untuk CPython (ini bukan kode "byte" sama sekali, ini adalah kode kata, di mana semua opcode lebarnya dua byte, bukan 1-3).
Kegagalan yang Anda lihat terjadi dalam
py2exe
kode parsing opcode, yang, mengingat versi terbaru yang dipostingpy2exe
hanya mengklaim dukungan untuk 3.3 dan 3.4, tidak mungkin memiliki pengetahuan, atau dukungan untuk, opcode kode kata baru; mereka bahkan belum dipahami pada saatpy2exe
terakhir diperbarui. Bytecode sering berubah dalam cara-cara kecil dari versi ke versi yang dapat merusak Python 3.5 (mengingat hanya dukungan 3.3 dan 3.4 yang diklaim secara eksplisit), tetapi 3.6 dijamin 100% gagal.Pembaruan: Pada titik ini (November 2019), sudah lebih dari lima tahun sejak
py2exe
rilis terakhir , dan pada awal tahun 2020 (ketika dukungan Python 2 hilang sepenuhnya), itu tidak akan berjalan pada versi Python yang didukung (3.4 sudah keluar dukungan). Saya pikir aman untuk mengatakan proyek tersebut ditinggalkan; temukan opsi lain, misalnyacx_Freeze
atauPyInstaller
.sumber
cx_freeze
. Ini kompatibel dengan python3.6 tetapi tidak dapat membuat satu file exe. MasalahnyaPyinstaller
adalah Anda tidak dapat membuat file exe x86 melalui os x64Python 3.3 and later are supported
. Tentu, jika dipikir-pikir, mungkin agak naif mengharapkan sesuatu yang begitu tua untuk bekerja, tetapi ketika Anda seorang pemula di bidang ini, ada cukup banyak pemula yang harus dihadapi.Solusi yang saya gunakan adalah menggunakan PyInstaller sebagai alternatif karena Py2Exe menghentikan pengembangan di python 3.4 dan tidak akan berfungsi dengan versi yang lebih baru.
Ini akan membuat subdirektori bernama dist dengan programAnda.exe yang terdapat dalam folder bernama programAnda.
Gunakan -F untuk menempatkan semua file yang dihasilkan dalam satu file yang dapat dieksekusi.
Gunakan dapat menggunakan -w ke jika Anda ingin menghapus tampilan konsol untuk GUI.
Menempatkan semuanya lebih keras.
Baca lebih lanjut tentang PyInstaller di sini .
Python versi 3.7.3.
sumber
Saya memiliki masalah yang sama, sebagai solusi saya menggunakan cx_freeze. Aplikasi saya didasarkan pada wxPython, windows 10, python 3.6, cx_freeze 5.5.1
Ini adalah file setup yang saya gunakan dan saya mendapatkan file msi di folder dist.
kemudian
python setup.py bdist_msi
sumber
from PyQt5 import QtGui
bagaimana cara memasukkannyapackages
? HanyaPyQt5
atau hanyaQtGui
atau keduanya?PyQt5
.Saya telah sukses dengan program Python 3.6 menggunakan garpu py2exe di https://github.com/albertosottile/py2exe .
sumber
Saya mencoba solusi, dengan menginstal Python 3.4.3:
1) masukkan ke dalam folder skrip Anda
2) nonaktifkan antivirus apa pun yang Anda miliki (anehnya, diketahui dengan pertanyaan SO lain xD)
3) panggil interpreter python 3.4.3 dengan jalur absolutnya, dalam kasus saya, saya telah menginstal di:
4) jalankan perintah
sumber
You are using pip version 8.1.1, however version 9.0.1 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command.
Saat saya mencoba mengupgrade pip, saya mendapatkan error yang sama!1) Try with Python 3.4.3, this one i have already tested.
2) Identify which python you have, when you type at console 'python', what version says?
mungkin Anda memiliki 2 python dan perlu menentukan mana yang ingin Anda perbarui.