使用py2exe编译用于注册excel加载项的python脚本无效
我的目标是制作一种安装程序,以便注册用Python编写的Office插件。因此,我从Python文件夹(Python27\Lib\site packages\win32com\demos\excelAddin.py)中的演示开始。脚本工作,按钮和消息框出现。然后我使用py2exe来部署它,并创建一个执行相同操作的可执行文件。但这样它就不起作用了,我的意思是:在我运行exe之后,按钮不会出现在Excel栏中。经过一些研究,我发现在如何将注册表项注册到Windows注册表上存在一些差异。可执行文件不注册以下项: xxxxx是应用程序的CLSID使用py2exe编译用于注册excel加载项的python脚本无效,python,registry,py2exe,win32com,excel-addins,Python,Registry,Py2exe,Win32com,Excel Addins,我的目标是制作一种安装程序,以便注册用Python编写的Office插件。因此,我从Python文件夹(Python27\Lib\site packages\win32com\demos\excelAddin.py)中的演示开始。脚本工作,按钮和消息框出现。然后我使用py2exe来部署它,并创建一个执行相同操作的可执行文件。但这样它就不起作用了,我的意思是:在我运行exe之后,按钮不会出现在Excel栏中。经过一些研究,我发现在如何将注册表项注册到Windows注册表上存在一些差异。可执行文件不
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\Implemented Categories\ --> (Standard) - REG_SZ -
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\Implemented Categories\{B3EF80D0-68E2-11D0-A689-00C04FD658FF}\ --> (Standard) - REG_SZ -
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\InprocServer32\ --> (Standard) - REG_SZ - pythoncomloader27.dll
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\InprocServer32\ --> Threading Model - REG_SZ - both
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\PythonCOMPath\ --> (Standard) - REG_SZ - C:\Python27\Lib\site-packages\win32com\demos\
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\Implemented Categories\ --> (Standard) - REG_SZ -
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\Implemented Categories\{B3EF80D0-68E2-11D0-A689-00C04FD658FF}\ --> (Standard) - REG_SZ -
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\InprocServer32\ --> (Standard) - REG_SZ - pythoncomloader27.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\InprocServer32\ --> Threading Model - REG_SZ - both
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\PythonCOMPath\ --> (Standard) - REG_SZ - C:\Python27\Lib\site-packages\win32com\demos\
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\Implemented Categories\ --> (Standard) - REG_SZ -
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\Implemented Categories\{B3EF80D0-68E2-11D0-A689-00C04FD658FF}\ --> (Standard) - REG_SZ -
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\InprocServer32\ --> (Standard) - REG_SZ - pythoncomloader27.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\InprocServer32\ --> Threading Model - REG_SZ - both
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\PythonCOMPath\ --> (Standard) - REG_SZ - C:\Python27\Lib\site-packages\win32com\demos\
事实上,当我直接运行excelAddin.py脚本时,我得到以下结果:
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\ --> (Standard) - REG_SZ - Python.Test.Addin
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\Debugging\ --> (Standard) - REG_SZ - 0
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\Implemented Categories\ --> (Standard) - REG_SZ -
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\Implemented Categories\{B3EF80D0-68E2-11D0-A689-00C04FD658FF}\ --> (Standard) - REG_SZ -
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\InprocServer32\ --> (Standard) - REG_SZ - pythoncomloader27.dll
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\InprocServer32\ --> Threading Model - REG_SZ - both
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\ProgID\ --> (Standard) - REG_SZ - Python.Test.ExcelAddin
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\PythonCOM\ --> (Standard) - REG_SZ - excelAddin.ExcelAddin
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\PythonCOMPath\ --> (Standard) - REG_SZ - C:\Python27\Lib\site-packages\win32com\demos\
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\xxxxx\PythonCOMPolicy\ --> (Standard) - REG_SZ - win32com.server.policy.EventHandlerPolicy
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\ --> (Standard) - REG_SZ - Python.Test.Addin
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\Debugging\ --> (Standard) - REG_SZ - 0
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\Implemented Categories\ --> (Standard) - REG_SZ -
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\Implemented Categories\{B3EF80D0-68E2-11D0-A689-00C04FD658FF}\ --> (Standard) - REG_SZ -
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\InprocServer32\ --> (Standard) - REG_SZ - pythoncomloader27.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\InprocServer32\ --> Threading Model - REG_SZ - both
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\ProgID\ --> (Standard) - REG_SZ - Python.Test.ExcelAddin
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\PythonCOM\ --> (Standard) - REG_SZ - excelAddin.ExcelAddin
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\PythonCOMPath\ --> (Standard) - REG_SZ - C:\Python27\Lib\site-packages\win32com\demos\
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\xxxxx\PythonCOMPolicy\ --> (Standard) - REG_SZ - win32com.server.policy.EventHandlerPolicy
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\ --> (Standard) - REG_SZ - Python.Test.Addin
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\Debugging\ --> (Standard) - REG_SZ - 0
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\Implemented Categories\ --> (Standard) - REG_SZ -
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\Implemented Categories\{B3EF80D0-68E2-11D0-A689-00C04FD658FF}\ --> (Standard) - REG_SZ -
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\InprocServer32\ --> (Standard) - REG_SZ - pythoncomloader27.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\InprocServer32\ --> Threading Model - REG_SZ - both
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\ProgID\ --> (Standard) - REG_SZ - Python.Test.ExcelAddin
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\PythonCOM\ --> (Standard) - REG_SZ - excelAddin.ExcelAddin
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\PythonCOMPath\ --> (Standard) - REG_SZ - C:\Python27\Lib\site-packages\win32com\demos\
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\xxxxx\PythonCOMPolicy\ --> (Standard) - REG_SZ - win32com.server.policy.EventHandlerPolicy
还有其他几个键我没有在这里显示,因为它们正确匹配。我想问题在于,从可执行文件中无法注册脚本,或者可能无法注册编译后的脚本“.pyc”。但是,即使我知道这个事实,我也不知道如何解决这个问题。还有其他人面临这种问题吗?多谢各位
其他资料:
- Python 2.7.6 32位
- Windows7专业版
- 办公室2010
- 链接到原始脚本
from distutils.core import setup
import py2exe
setup(windows=[{
'script': "excelAddin.py",
'uac_info': "requireAdministrator",
},])
在安装程序中进行一些错误检查,并将其设置为py2exe
console=
应用程序,以便您可以轻松查看打印到stdout和stderr的任何错误消息。您是否尝试过使用诸如cx\u freeze之类的替代方法?@Temere谢谢,我尝试过cx\u freeze,我注意到它允许对管理员权限和库导入进行较少的操作,但这并不能解决上述问题problem@martineau谢谢,我做到了,我唯一能注意到的是win32com的register.py模块无法正确获取脚本路径(scriptDir和addnPath变量),因为在部署之后,实际上已经没有脚本了。不幸的是,我没有太多时间继续这样做,现在我正在用C#和VSTO做同样的事情。。。