запускати скрипт python як адміністратор

Я пишу програму встановлення, використовуючи py2exe, який потрібно запустити в адміністратора, щоб мати дозвіл виконувати різні файлові операції. Я змінив деякий зразок коду з каталогу user_access_controls, який поставляється з py2exe для створення файлу налаштування. створення/запуск генерується exe працює нормально, коли я запускаю його на своєму комп'ютері. однак, коли я намагаюся запустити EXE на комп'ютері, на якому не встановлений пітон, я отримую помилку, говорячи, що модулі імпорту (shutil і os у цьому випадку) не існують. це було моє враження, що py2exe автоматично обгортає всі файлові залежності в EXE, але я думаю, що це не так. py2exe генерує ZIP-файл, який називається бібліотека, яка містить всі модулі python, але, мабуть, вони не використовуються сгенерованим exe. в основному моє запитання полягає в тому, як я можу отримати імпорт для включення в 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,
    )
1
Ви використовуєте всю папку файлів? Не достатньо просто скопіювати файли .exe і .zip.
додано Автор Gringo Suave, джерело
так, я копіюю всю папку "dist".
додано Автор Ben, джерело

2 Відповіді

Спробуйте вказати розділ налаштування 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
)
2
додано
Так, я цього не знав. У win64 скаржись, якщо bundle_files <3. Це ще не підтримується, оскільки код у джерелі \ MemoryModule.c не працює на win64. (взято з тут )
додано Автор alexey, джерело
Я просто взяв невелику програму (watt.py) print ("Привіт світ!") Після цього використовувався файл setup.py точно з мого аверсу, ввівши > python setup.py py2exe Отримано залежність від watt.exe. Це залежить тільки від msvcr90.dll та kernel32.dll. Не могли б ви, будь ласка, повторити кроки, щоб переконатись, що ми маємо ті самі результати?
додано Автор alexey, джерело
Я зробив експеримент і думав, що файли пакетів є необхідними, але недостатньо, здається, що zipfile = None також потрібен. Якщо не встановити zipfile = None , розмір exe-файлу стає дуже маленьким, і він має проблеми з залежністю. Початкова відповідь редагується відповідно.
додано Автор alexey, джерело
Watt.py - це лише один рядок: print ("Hello World!") . До речі, розмір файлу exe повинен становити як мінімум кілька мегабайт.
додано Автор alexey, джерело
додано Автор alexey, джерело
Бен, нам треба уникати дискусій у коментарях. Давайте поговоримо, це тут
додано Автор alexey, джерело
в ньому сказано: "пакетні файли 1, які ще не підтримуються на win64" - я спробую встановити 32-розрядні версії всього і подивитися, що відбувається
додано Автор Ben, джерело
хм, він все ще працює тільки на комп'ютерах з встановленим python. Єдина відмінність полягає в тому, що зараз немає повідомлень про помилку. він просто працює так, як все працює нормально, але нічого не робить. Я підозрюю, що пакетний файл все ще не містить залежностей від файлу.
додано Автор Ben, джерело
Чи можете ви публікувати код для "watt.py"? Я маю на увазі, що модулі Python - це не модулі DLL. і для уточнення, все працює нормально на моєму комп'ютері - проблеми виникають лише тоді, коли я намагаюся запустити на комп'ютері без python.
додано Автор Ben, джерело

Я перезаписую ваш сценарій налаштування для вас. Це буде працювати

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"]}
              }
    )
0
додано
ІТ КПІ - Python
ІТ КПІ - Python
625 учасників

Канал обговорень про всякі штуки зі світу пайтону. Прохання: 0. мати повагу одне до одного; 1. не матюкатися в сторону людей; 2. не захламляти тред повідомленнями по одному слову;