我正在开发一个关于Python的小工具,它基本上在文件夹上启动一组脚本。我需要将它打包在一个独立的二进制文件上,我正在使用py2exe。
我当前的代码使用os.path.listdir()
来获取文件夹上的所有.py文件,然后根据PyQT界面上的用户输入使用execfile()
函数启动其中一些文件。
如果通过主Python文件执行,我的代码按预期工作,但在使用py2exe编译时失败。例外是:
IOError: [Errno 2] No such file or directory
用execfile()
启动的python文件。
我目前正与"bundle_files": 1
和zipfile = 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'
答案 0 :(得分:2)
如果你使用大于0的*.pyc
,Py2exe只包含.pyo
个文件(或"optimize"
个文件。由于您的错误消息提到了一个不存在的*.py
文件:
IOError:[Errno 2]没有这样的文件或目录: 'C:\用户\ my_user \路径\到\ APP \ DIST \ APP.EXE \应用\有效载荷\ autoruns.py'
,这可能是原因。
一般情况下,我建议不要使用execfile()
。而是编写自己的包。如果您在应用程序代码中的某处导入Py2exe,它将自动包含此包。此程序包应包含要动态加载的文件。您可以使用以下代码:
my_module = __import__('my_package.module_name')
字符串'module_name'
可以来自用户通过GUI输入。