Как остановить программу Python, скомпилированную в py2exe, от отображения ImportError: нет имен модулей «ctypes»

Мне было интересно, может ли это быть ошибкой компиляции или есть что-то, что я могу сделать, чтобы остановить ее отображение. Я сделал программу argparse для cmd. Я скомпилировал его с помощью 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()

person TheMountainFurnaceGabriel    schedule 31.05.2014    source источник


Ответы (1)


Это вызвано ошибкой в ​​py2exe, она будет исправлена ​​в следующем выпуске. Подробнее

Решение состоит в том, чтобы добавить ctypes к bootstrap_modules в файле C:\Python34\Lib\site-packages\py2exe\runtime.py (строка 117).

...
# modules which are always needed
bootstrap_modules = {
    # Needed for Python itself:
    "ctypes",
    "codecs",
    "io",
    "encodings.*",
    }
...
person Victor Aurélio    schedule 02.06.2014
comment
Спасибо за ответ. Это как-то связано с тем, что _ctypes.pyd должен сопровождать мой EXE-файл, чтобы работать? - person Pygmalion; 15.10.2014
comment
@ Пигмалион, не знаю, извини! - person Victor Aurélio; 18.10.2014
comment
@ Виктор, какой следующий релиз ?? Ваш ответ от 2014 года, и я установил py2exe 0.6.9 только вчера (12.01.19). Проблема еще не устранена. Какую версию ты используешь? Потому что в моей папке пакета py2exe нет runtime.py! - person Apostolos; 02.12.2019