Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用cx#U freeze和pywin32:Module';pythoncom';isn';t在冻结的系统路径中_Python 3.x_Pywin32_Win32com_Cx Freeze_Pythoncom - Fatal编程技术网

Python 3.x 使用cx#U freeze和pywin32:Module';pythoncom';isn';t在冻结的系统路径中

Python 3.x 使用cx#U freeze和pywin32:Module';pythoncom';isn';t在冻结的系统路径中,python-3.x,pywin32,win32com,cx-freeze,pythoncom,Python 3.x,Pywin32,Win32com,Cx Freeze,Pythoncom,我正在尝试使用cx\U freeze在Windows 7上从python3脚本创建.exe。该脚本涉及使用pywin32操作Excel文件。我可以从setup.py文件成功构建.exe;但是,当我运行.exe时,会引发以下错误: 回溯(最近一次呼叫最后一次): 文件 “C:\Python33\lib\site packages\cx\u Freeze\initscripts\Console3.py”, 第27行,在exec中(代码,m_dict_u2;) 文件“MyScript.py”,第行 1

我正在尝试使用cx\U freeze在Windows 7上从python3脚本创建.exe。该脚本涉及使用pywin32操作Excel文件。我可以从setup.py文件成功构建.exe;但是,当我运行.exe时,会引发以下错误:

回溯(最近一次呼叫最后一次):

文件 “C:\Python33\lib\site packages\cx\u Freeze\initscripts\Console3.py”, 第27行,在exec中(代码,m_dict_u2;)

文件“MyScript.py”,第行 12,在

文件 “C:\Python\64位\3.3\lib\importlib\u bootstrap.py”,第1558行,中 _查找并加载

文件“C:\Python\64位\3.3\lib\importlib\u bootstrap.py”,第1505行,在 _查找并加载未锁定的

文件“C:\Python\64位\3.3\lib\importlib\u bootstrap.py”,第313行,在 _在已删除\u帧的情况下调用\u

文件“C:\Python\64位\3.3\lib\importlib\u bootstrap.py”,第1558行,在 _查找并加载

文件“C:\Python\64位\3.3\lib\importlib\u bootstrap.py”,第1525行,在 _查找并加载未锁定的

文件“C:\Python33\lib\site packages\win32com\uuuuu init\uuuuuuu.py”,第6行,在

进口蟒蛇

文件 “C:\Python\64位\3.3\lib\importlib\u bootstrap.py”,第1558行,中 _查找并加载

文件“C:\Python\64位\3.3\lib\importlib\u bootstrap.py”,第1525行,在 _查找并加载未锁定的

文件“C:\Python33\lib\site packages\pythoncom.py”,第3行,在
pywintypes.\u导入\u pywin32\u系统\u模块\(“pythoncom”,globals())

文件“C:\Python33\lib\site packages\win32\lib\pywintypes.py”,第61行, 在(导入)pywin32(系统)模块中_

引发导入错误(“模块“%s” 不在冻结的sys.path%s“%中(modname,sys.path))

导入错误:模块“pythoncom”不在冻结的系统路径中

['C:\Python33\build\exe.win-amd64\3.3\MyScript.exe'

'C:\Python33\build\exe.win-amd64\3.3'

'C:\Python33\build\exe.win-amd64\3.3\MyScript.zip'

'C:\Python33\build\exe.win-amd64\3.3\library.zip']

下面是我的setup.py文件当前的外观:

import sys
from cx_Freeze import setup, Executable

base = None
if sys.platform == 'win32':
    base = 'Win32GUI'

includes = []
packages = []
executables = [Executable('MyScript.py', base=base)]
include_files = ['MyFolder1/','MyFolder2/Spreadsheet.xls']

setup(name='My Script',
      version='0.1',
      description='My Script',
      executables=executables,
      options = {'build_exe': {'includes':includes,
                               'packages':packages,
                               'include_msvcr':True,
                               'include_files':include_files}})

到目前为止,我已经尝试在includes和packages列表中同时列出“pythoncom”和“win32com”。非常感谢您的帮助

查看,您需要确保将名为pythoncom33.dll之类的文件复制到构建目录中。

查看,看起来您需要确保将名为pythoncom33.dll之类的文件复制到构建目录中。

因此,整个问题实际上源于在运行64位版本的Python-3.3.2和Windows 7时安装了32位版本的pywin32。按照Thomas K的建议,将pythoncom33.dll添加到我的setup.py的include_文件后,我遇到了另一个错误:

ImportError:DLL加载失败:%1不是有效的Win32应用程序

经过一些研究,我发现这种错误在混合32位和64位时是典型的。因此,我卸载了pywin32 32位并安装了pywin32 64位,但我的脚本引发了另一个错误:

导入win32api、sys、os

ImportError:DLL加载失败:找不到指定的模块


正如中所建议的,我将28个win32*.pyd文件从Lib/site packages/win32文件夹复制到Python33文件夹python.exe旁边,一切正常。

因此,整个问题实际上源于在运行64位版本的python-3.3.2和Windows 7时安装了32位版本的pywin32。按照Thomas K的建议,将pythoncom33.dll添加到我的setup.py的include_文件后,我遇到了另一个错误:

ImportError:DLL加载失败:%1不是有效的Win32应用程序

经过一些研究,我发现这种错误在混合32位和64位时是典型的。因此,我卸载了pywin32 32位并安装了pywin32 64位,但我的脚本引发了另一个错误:

导入win32api、sys、os

ImportError:DLL加载失败:找不到指定的模块


正如中所建议的,我将28个win32*.pyd文件从Lib/site packages/win32文件夹复制到Python33文件夹中python.exe旁边的文件夹中,一切正常。

因此,我遇到了一个类似的问题,cx\u Freeze无法拉入pywintypes DLL,但令人沮丧的是,只有在一些机器上,我才不得不进一步探讨这个问题(我有一个坏习惯,就是在洞里追兔子)。pywin32似乎试图将其DLL安装到Windows系统目录中,但如果由于缺乏权限而失败,它将退回到Python目录中。我所看到的行为是因为cx_Freeze对它发现的依赖项集合应用了一个已知系统文件夹路径的黑名单,以避免拉入操作系统DLL

通过将这些DLL的路径添加到“include_files”参数中,根据需要复制这些DLL确实可以解决此问题(请记住,您不能保证它们将被放置在系统文件夹中)。另一种解决方案是使用白名单覆盖黑名单,您可以使用“bin_includes”/“bin_path_includes”参数配置白名单。下面是一个快速示例,演示如何使用setup.py文件配置此参数(对于Python 2.7,但唯一的区别应该是pywintypes DLL文件名):


因此,我遇到了一个类似的问题,cx_Freeze未能拉入pywintypes DLL,但令人沮丧的是,只有在某些机器上,才迫使我进一步探讨这个问题(我有一个坏习惯,就是在洞里追兔子)。pywin32似乎试图将其DLL安装到Windows系统目录中,但如果由于缺乏权限而失败,它将退回到Python目录中。我所看到的行为是由于
from cx_Freeze import setup, Executable

# This can also be an absolute path to the file if you wish to be very specific
bin_includes = ["pywintypes27.dll"]

options = {
    "build_exe": {
        "bin_includes": bin_includes
    }
}

executable = Executable(script='main.py')

setup(version='x.x.x',
      options=options,
      executables=[executable])