Pyinstaller брелок для Windows 32 бит - PullRequest
0 голосов
/ 24 мая 2018

У меня есть следующий тестовый код Python:

import keyring
print(keyring.get_keyring())
keyring.set_password("a","b","c")
print(keyring.get_password("a","b"))

Если я запускаю этот код с использованием 32-битного или 64-битного Python, я получаю следующий вывод (как и ожидалось):

<keyring.backends.Windows.WinVaultKeyring object at 0x00000187B7DD6358>
c

Моя цель - создать два автономных исполняемых файла (32-битный и 64-битный): для этого я использую pyinstaller и следующую команду (test.py - это имя файла, содержащего код Python, показанный выше)

pyinstaller --onefile test.py

Если я запускаю 64-битный exe-файл, я получаю следующий вывод (как и ожидалось):

<keyring.backends.Windows.WinVaultKeyring object at 0x00000187B7DD6358>
c

Вместо этого, если я запускаю 32-битный exe-файл, я получаю следующий вывод:

<keyring.backends.fail.Keyring object at 0x05463ED0>
Traceback (most recent call last):
  File "test.py", line 3, in <module>
    keyring.set_password("a","b","c")
  File "site-packages\keyring\core.py", line 47, in set_password
  File "site-packages\keyring\backends\fail.py", line 23, in get_password
RuntimeError: No recommended backend was available. Install the keyrings.alt package if you want to use the non-recommended backends. See README.rst for details.
[2732] Failed to execute script test

Кто-нибудь знает, что происходит?

Спасибо,

Даниэле

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Настройка файла keyrings.alt со страницы Keyring Github действительно работает и объясняет, почему это было проблемой только в Keyring> 12, так как он был включен в Модуль до этого.Я также смог обойти это, установив pip install pywin32 и запустив следующие дополнения:

import keyring
import win32timezone
from keyring.backends import Windows
keyring.set_keyring(Windows.WinVaultKeyring())
print(keyring.get_keyring())
keyring.set_password("a","b","c")
print(keyring.get_password("a","b"))
0 голосов
/ 31 мая 2018

Решено с использованием альтернативного бэкэнда для ключей.Если я изменю свой код с:

import keyring
print(keyring.get_keyring())
keyring.set_password("a","b","c")
print(keyring.get_password("a","b"))

на:

import keyring
from keyrings.alt import Windows
keyring.set_keyring(Windows.RegistryKeyring())
print(keyring.get_keyring())
keyring.set_password("a","b","c")
print(keyring.get_password("a","b"))

, это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...