запуск сценария python от имени администратора - PullRequest
1 голос
/ 28 октября 2011

Я пишу установщик, использующий py2exe, который должен запускаться с правами администратора, чтобы иметь разрешение на выполнение различных файловых операций.Я изменил пример кода из каталога user_access_controls, который поставляется с py2exe для создания установочного файла.Создание / запуск сгенерированного exe работает нормально, когда я запускаю его на своем компьютере.однако, когда я пытаюсь запустить exe-файл на компьютере, на котором не установлен python, я получаю сообщение об ошибке, указывающее, что модули импорта (в данном случае shutil и os) не существуют.у меня сложилось впечатление, что py2exe автоматически упаковывает все файловые зависимости в exe, но я думаю, что это не так.py2exe генерирует zip-файл с именем library, который содержит все модули python, но, очевидно, они не используются сгенерированным exe.в основном мой вопрос заключается в том, как мне получить импорт, который будет включен в исполняемый файл py2exe.возможно, необходимо внести изменения в мой файл setup.py - код для этого выглядит следующим образом:

from distutils.core import setup
import py2exe

# The targets to build
# create a target that says nothing about UAC - On Python 2.6+, this
# should be identical to "asInvoker" below.  However, for 2.5 and
# earlier it will force the app into compatibility mode (as no
# manifest will exist at all in the target.)
t1 = dict(script="findpath.py",
          dest_base="findpath",
          uac_info="requireAdministrator")
console = [t1]

# hack to make windows copies of them all too, but
# with '_w' on the tail of the executable.
windows = [{'script': "findpath.py",
            'uac_info': "requireAdministrator",
            },]

setup(
    version = "0.5.0",
    description = "py2exe user-access-control",
    name = "py2exe samples",
    # targets to build
    windows = windows,
    console = console,
    )

Ответы [ 2 ]

2 голосов
/ 28 октября 2011

Попробуйте установить options={'py2exe': {'bundle_files': 1}}, и zipfile = None в разделе настройки. Python создаст один .exe файл без зависимостей. Пример:

from distutils.core import setup
import py2exe

setup(
    console=['watt.py'],
    options={'py2exe': {'bundle_files': 1}},
    zipfile = None
)
0 голосов
/ 28 января 2016

Я переписываю ваш скрипт установки для вас.Это будет работать

from distutils.core import setup
import py2exe

# The targets to build
# create a target that says nothing about UAC - On Python 2.6+, this
# should be identical to "asInvoker" below.  However, for 2.5 and
# earlier it will force the app into compatibility mode (as no
# manifest will exist at all in the target.)
t1 = dict(script="findpath.py",
          dest_base="findpath",
          uac_info="requireAdministrator")
console = [t1]

# hack to make windows copies of them all too, but
# with '_w' on the tail of the executable.
windows = [{'script': "findpath.py",
            'uac_info': "requireAdministrator",
            },]

setup(
    version = "0.5.0",
    description = "py2exe user-access-control",
    name = "py2exe samples",
    # targets to build
    windows = windows,
    console = console,
    #the options is what you fail to include it will instruct py2exe to include these modules explicitly
    options={"py2exe":
               {"includes": ["sip","os","shutil"]}
              }
    )
...