我想知道这是否可能是编译错误,或者是否有什么办法可以阻止它显示。我为cmd做了一个argparse程序。我用py2exe编译了它,当我运行它时,它会正确执行该程序,但在运行代码之前始终会出现此错误:
Traceback (most recent call last): File "boot_common.py", line 46, in <module> ImportError: No module named 'ctypes'
如果这是我的代码中的内容,则这是我的脚本:
import argparse import zipfile import os from contextlib import closing def parse_args(): parser = argparse.ArgumentParser('ziputil '+\ '-m <mode> -f <file> -p <output>') parser.add_argument('-f', action="store", dest='files', type=str, help='-f <file> : Specify the files to be zipped, or the .zip to be unzipped.') parser.add_argument('-m', action="store", dest='mode', type=str, help='-m <mode> : Zip to zip files, UnZip, to unzip files, or ZipDir to zip entire directories.') parser.add_argument('-p', action="store", dest='path', type=str, nargs='?', const=os.getcwd(), help='-p <path> : specify the path to unpack/pack to.') return vars(parser.parse_args()) def unzipPackage(path, files): with zipfile.ZipFile(files, "r") as z: z.extractall(path) def zipPackage(path, files): files = files.split(', ') zf = zipfile.ZipFile(path, mode='w') try: for file in files: zf.write(file) finally: zf.close() def zipdir(path, zip): for root, dirs, files in os.walk(path): for file in files: zip.write(os.path.join(root, file)) dict = parse_args() files = dict['files'] path = dict['path'] mode = dict['mode'] if mode == 'Zip': zipPackage(path, files) elif mode == 'UnZip': unzipPackage(path, files) elif mode == 'ZipDir': zipf = zipfile.ZipFile(path, 'w') zipdir(files, zipf) zipf.close()
这是由py2exe中的错误引起的,它将在下一个版本中修复。更多信息
该解决方案是添加ctypes到bootstrap_modules在C:\Python34\Lib\site- packages\py2exe\runtime.py文件(行117)。
ctypes
bootstrap_modules
C:\Python34\Lib\site- packages\py2exe\runtime.py
... # modules which are always needed bootstrap_modules = { # Needed for Python itself: "ctypes", "codecs", "io", "encodings.*", } ...