El módulo de llavero no está incluido al empaquetar con py2exe.

Estoy haciendo una aplicación usando python 2.7 en windows y keyring-3.2.1 . En mi código de python en eclipse, utilicé

import keyring keyring.set_password("service","jsonkey",json_res) json_res= keyring.get_password("service","jsonkey") 

está funcionando bien ya que estoy almacenando la respuesta de json en el llavero. Pero, cuando convertí el código de Python en exe usando py2exe, muestra el anillo de claves de error de importación al hacer dist. Por favor, sugiera cómo incluir el anillo de llaves en py2exe.

 Traceback (most recent call last): File "APP.py", line 8, in  File "keyring\__init__.pyc", line 12, in  File "keyring\core.pyc", line 15, in  File "keyring\util\platform_.pyc", line 4, in  File "keyring\util\platform.pyc", line 29, in  AttributeError: 'module' object has no attribute 'system' 

El código de plataforma_.py es:

 from __future__ import absolute_import import os import platform def _data_root_Windows(): try: root = os.environ['LOCALAPPDATA'] except KeyError: # Windows XP root = os.path.join(os.environ['USERPROFILE'], 'Local Settings') return os.path.join(root, 'Python Keyring') def _data_root_Linux(): """ Use freedesktop.org Base Dir Specfication to determine storage location. """ fallback = os.path.expanduser('~/.local/share') root = os.environ.get('XDG_DATA_HOME', None) or fallback return os.path.join(root, 'python_keyring') # by default, use Unix convention data_root = globals().get('_data_root_' + platform.system(), _data_root_Linux) 

El código de plataforma.py es:

 import os import sys # While we support Python 2.4, use a convoluted technique to import # platform from the stdlib. # With Python 2.5 or later, just do "from __future__ import absolute_import" # and "import platform" exec('__import__("platform", globals=dict())') platform = sys.modules['platform'] def _data_root_Windows(): try: root = os.environ['LOCALAPPDATA'] except KeyError: # Windows XP root = os.path.join(os.environ['USERPROFILE'], 'Local Settings') return os.path.join(root, 'Python Keyring') def _data_root_Linux(): """ Use freedesktop.org Base Dir Specfication to determine storage location. """ fallback = os.path.expanduser('~/.local/share') root = os.environ.get('XDG_DATA_HOME', None) or fallback return os.path.join(root, 'python_keyring') # by default, use Unix convention data_root = globals().get('_data_root_' + platform.system(), _data_root_Linux) 

    El problema que está informando se debe a un entorno que contiene módulos no válidos, tal vez debido a una instalación incorrecta de una versión de anillo de claves sobre otra. Querrá asegurarse de haber eliminado los rests de la versión anterior del anillo de claves. En particular, asegúrese de que no haya ningún archivo llamado keyring \ util \ platform. * En sus paquetes de sitio.

    Después de hacer eso, sin embargo, encontrará otro problema. Keyring carga sus módulos backend mediante progtwigción , por lo que py2exe no los detectará.

    Para keyring.backends , querrá agregar una statement de ‘paquetes’ a sus opciones de py2exe para incluir específicamente el paquete keyring.backends . setup.py el siguiente script setup.py con Python 2.7 para convertir ‘app.py’ (que importa el anillo de claves) a un exe:

     from distutils.core import setup import py2exe setup( console=['app.py'], options=dict(py2exe=dict( packages='keyring.backends', )), ) 

    El app.exe resultante importará e invocará el anillo de claves.