gpt4 book ai didi

python - 如何在 py2exe 上捆绑使用 execfile() 启动的 .py 文件?

转载 作者:可可西里 更新时间:2023-11-01 13:45:01 27 4
gpt4 key购买 nike

我正在用 Python 开发一个小工具,它主要是在一个文件夹上启动一组脚本。我需要将它打包到一个独立的二进制文件中,我正在为它使用 py2exe。

我当前的代码使用 os.path.listdir() 获取文件夹中的所有 .py 文件,然后使用 execfile() 函数启动其中一些文件基于 PyQT 界面上的用户输入。

如果通过主 Python 文件执行,我的代码会按预期工作,但在使用 py2exe 编译时会失败。异常(exception)情况是:

IOError: [Errno 2] No such file or directory

对于使用 execfile() 启动的 python 文件。

我目前正在使用 "bundle_files": 1zipfile = None 进行捆绑。我试图包含这些与包含和包混淆的文件,但没有运气。你能帮我正确配置py2exe吗?

这是我当前的 setup.py:

from distutils.core import setup
import py2exe
import os

#Python modules excluded from binary file
mod_excludes = [
"Tkinter",
"doctest",
"unittest",
"pydoc",
"pygments",
"pdb",
"email",
"_ssl",
"difflib",
"inspect"
]

#Avoid adding this dependencies
dll_excludes = [
"MSVCP90.dll",
"w9xpopen.exe"
]

#Force to exe
mod_includes = [
"sip"
]

package_includes = [
"app.payloads"
]



py2exe_options = {
"optimize": 2, # 0 (None), 1 (-O), 2 (-OO)
"includes": mod_includes,
"excludes": mod_excludes,
"dll_excludes": dll_excludes,
"packages": package_includes,
#"xref": False,
"bundle_files": 1,
"compressed": True
#"dist_dir": dist_dir
}

#TODO generar automaticamente la interfaz

setup(
windows=[{"script": "app.py",
"icon_resources": [(1, "app/gui/Res/app.ico")],
"uac_info": "requireAdministrator"}],
data_files=exe_files,
options={"py2exe": py2exe_options},
zipfile=None
)

我得到以下回溯:

Traceback (most recent call last):
File "app\gui\ui.pyo", line 22, in call_report
File "app\core\core.pyo", line 32, in generate_report
File "app\core\core.pyo", line 18, in launch_payload
IOError: [Errno 2] No such file or directory: 'C:\\Users\\my_user\\path\\to\\app\\dist\\app.exe\\app\\payloads\\autoruns.py'

最佳答案

Py2exe 仅包含 *.pyc 文件(或 .pyo 文件,如果您像您一样使用大于 0 的 "optimize")。由于您的错误消息提到了一个不存在的 *.py 文件:

IOError: [Errno 2] No such file or directory: 'C:\Users\my_user\path\to\app\dist\app.exe\app\payloads\autoruns.py'

,可能是这个原因。

一般来说,我建议不要使用execfile()。而是编写自己的包。如果您在应用程序代码中的某处导入它,Py2exe 将自动包含该包。该包应包含您要动态加载的文件。您可以使用此代码:

my_module = __import__('my_package.module_name')

字符串 'module_name' 可以来自用户通过 GUI 输入。

关于python - 如何在 py2exe 上捆绑使用 execfile() 启动的 .py 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16484354/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com