簡體   English   中英

無法使用py2exe運行生成的.exe

[英]Cannot run generated .exe with py2exe

我正在嘗試使用py2exe為生成excel的python腳本生成aa .exe。 這只是一個示例代碼。 我正在將值100寫入單元格,並使用openpyxl將excel保存到Users Desktop。 當我直接運行它時,這工作得很好。

import openpyxl
import getpass

wb = openpyxl.Workbook()

ws = wb.create_sheet('test')
ws.cell(row=1, column=1, value=100)

username = getpass.getuser()

wb.save('C:\\Users\\{}\\create_exe\\gen.xlsx'.format(username))
print 'Done'

當我使用py2exe進行編譯時,它也可以正常編譯。 當我運行生成的.exe文件時出現問題。 我得到一個回報,說ImportError: No module named jdcal

setup.py文件如下

import py2exe
from distutils.core import setup

packages = ["openpyxl", "openpyxl.workbook", "xml.etree", "xml"]
excludes = []

setup(console=['test_program.py'],
      options={"py2exe": {"excludes": excludes,
                          "packages": packages}}
      )

我已經試過了

  1. 我已經搜索過,很少有人說使用pip安裝openpyxl。 我已經做到了,並且pip說它已經安裝好了。
  2. 我也嘗試過使用pip安裝jdcal,並且pip表示已安裝。
  3. 我已經卸載了jdcal並使用pip和手動安裝了它,仍然是同樣的錯誤。
  4. 我已經將jdcal包含在軟件包中,但結果仍然沒有變化。

我希望有人可以幫助我。

提前致謝

編輯:在dist文件夾中生成的文件如下(openpyxl在這里看不到,我不知道為什么)

  1. tcl(文件夾)
  2. _ctypes.pyd
  3. _elementtree.pyd
  4. _hashlib.pyd
  5. _multiprocessing.pyd
  6. _socket.pyd
  7. _ssl.pyd
  8. _tkinter.pyd
  9. bz2.pyd
  10. pyexpat.pyd
  11. select.pyd
  12. unicodedata.pyd
  13. win32ui.pyd
  14. numpy.core._dummy.pyd
  15. numpy.core.multiarray.pyd
  16. numpy.core.multiarray_tests.pyd
  17. numpy.core.operand_flag_tests.pyd
  18. numpy.core.struct_ufunc_test.pyd
  19. numpy.core.test_rational.pyd
  20. numpy.core.umath.pyd
  21. numpy.core.umath_tests.pyd
  22. numpy.fft.fftpack_lite.pyd
  23. numpy.linalg._umath_linalg.pyd
  24. numpy.linalg.lapack_lite.pyd
  25. numpy.random.mtrand.pyd
  26. _win32sysloader.pyd
  27. win32api.pyd
  28. win32pdh.pyd
  29. win32pipe.pyd
  30. tk85.dll
  31. tcl85.dll
  32. libiomp5md.dll
  33. pywintypes27.dll
  34. python27.dll
  35. w9xpopen.exe
  36. pythoncom27.dll
  37. library.zip
  38. test_program.exe(可執行文件)

嘗試在setup.py中手動將其setup.pypackages = ["openpyxl", "openpyxl.workbook", "xml.etree", "xml"]因此應該是: packages = ["openpyxl", "openpyxl.workbook", "xml.etree", "xml", "jdcal"]

我個人很幸運,讓py2exe檢測到所需的模塊。 我從未嘗試過指定每個必要的模塊。 嘗試這個:

   from distutils.core import setup
import py2exe

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

這應該從命令行運行為

python setup.py py2exe

py2exe在dist目錄中輸出.dll文件,這些文件必須位於運行.exe文件的目錄中。 如果只需要一個.exe文件而沒有.dll文件,請嘗試以下操作:

from distutils.core import setup
import py2exe, sys, os

sys.argv.append('py2exe')

setup(
    options = {'py2exe': {'bundle_files': 1, 'compressed': True}},
    console = [{'script': "test_program.py"}],
    zipfile = None,
)

這應該從命令行運行為

python setup.py

我使用cx_freeze ,從來沒有任何問題。 這是cx_freeze文件的setup.py

from cx_Freeze import setup, Executable
build_exe_options = {"excludes": ["html5lib"],"optimize":2}
setup(name = "App Name" ,
      version = "1.0.0.0" ,
      options = {"build_exe": build_exe_options},
      description = "" ,
      executables = [Executable("FooBar.py")])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM