【问题标题】:How can I convert Python file with data files more than one to .exe format?如何将具有多个数据文件的 Python 文件转换为 .exe 格式?
【发布时间】:2021-05-23 07:46:50
【问题描述】:

我是新手,Python 和编程。我尝试编写需要一个 .docx、一个 .xlsx 和一个图像文件才能正常工作的代码。用 py2exe 将其转换为 .exe 格式时,出了点问题,我的程序没有打开!我只是将 setup.py 文件更改如下:

import os
from distutils.core import setup
import py2exe

import tkinter as tk
from tkinter import ttk
import sys
import os
import pandas as pd
from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH

Mydata_files = [('Data.docx', ['C:/Users/Murat/Desktop/Combobox/Data.docx']),
                   ('Data.xlsx', ['C:/Users/Murat/Desktop/Combobox/Data.xlsx']),
                   ('Logo.gif', ['C:/Users/Murat/Desktop/Combobox/Logo.gif'])]

setup(console=['Combobox.py'],
      data_files = Mydata_files,
      options={"py2exe":{"includes": ["lxml._elementpath"], "unbuffered": True, "optimize": 2}})

现在,我可以在 dist 文件夹中看到我的数据文件,但是我的代码引发了权限错误:

Traceback (most recent call last):
  File "Combobox.py", line 94, in <module>
  File "pandas\util\_decorators.pyc", line 299, in wrapper
  File "pandas\io\excel\_base.pyc", line 336, in read_excel
  File "pandas\io\excel\_base.pyc", line 1057, in _init_
  File "pandas\io\excel\_base.pyc", line 938, in inspect_excel_format
  File "pandas\io\common.pyc", line 651, in get_handle
PermissionError: [Errno 13] Permission denied: 'Data.xlsx

我的代码中关于Data.xlsx文件的行如下:

df=pd.read_excel("Data.xlsx")

【问题讨论】:

  • 谢谢你,EldinAyal!你是对的,这是我的错误,但没有任何改变。

标签: python py2exe setup.py


【解决方案1】:

你应该做的是在最后使用 input() 命令等待用户关闭控制台

另外请在编写脚本时始终使用 ma​​in,以免在导入时遇到奇怪的行为

if __name__ == '__main__': #Use dunder method as a best practice

Mydata_files = []
for files in os.listdir("C:/Users/Murat/Desktop/Combobox/"):
    f1 = "C:/Users/Murat/Desktop/Combobox/" + files
    if os.path.isfile(f1):
        f2 = 'images', [f1]
        Mydata_files.append(f2)

setup(
    console=['trypyglet.py.py'],
    data_files=Mydata_files,
    options={
        "py2exe": {
            "unbuffered": True,
            "optimize": 2
        }
    }
)
input = input() # Use input to wait for the user

【讨论】:

  • 谢谢你,Sys.Overdrive!纠正我的错误后(“trypyglet.py.py”必须是“Combobox.py”),我尝试了你的建议,但仍然给出了这个错误:KeyError: 'lxml.etree'
  • 你确定你正确安装了 lxml.etree 吗? link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 2019-07-13
相关资源
最近更新 更多