2013-09-30 5 views
1

Я пытаюсь использовать Py2Exe для создания исполняемого файла Windows из postreview.py ReviewBoard, поэтому моим пользователям не нужно устанавливать Python для отправки запросов на просмотр.Py2Exe и pkg_resources.iter_entry_points()

Я столкнулся с проблемой, в которой скомпилированная версия не может найти никаких зарегистрированных клиентов SCM. Я отслеживаются это вниз к следующей строке в коде:

for ep in pkg_resources.iter_entry_points(group='rbtools_scm_clients'): 

Эти точки входа перечислены в яйце RBTools в EGG-INFO \ entry_points.txt. В скомпилированном exe функция iter_entry_points() возвращает пустой список.

Есть ли какой-либо путь через Py2Exe, чтобы компилировать exe из этих точек входа? Или я придерживаюсь настройки postreview (в основном жесткого кодирования точек входа), чтобы заставить это работать?

Спасибо за любые советы!

ответ

0

В случае, если кто-либо еще сталкивается с этим в поисках ответа, я получил его для работы, жестко кодируя точки входа. Я должен был обновить функцию load_scmclients() в rbtools/clients/__init__.py следующим образом:

import imp 
def main_is_frozen(): 
    return (hasattr(sys, "frozen") or # new py2exe 
      hasattr(sys, "importers") # old py2exe 
      or imp.is_frozen("__main__")) # tools/freeze 

from rbtools.clients.svn import SVNClient 
from rbtools.clients.git import GitClient 
from rbtools.clients.mercurial import MercurialClient 
from rbtools.clients.cvs import CVSClient 
from rbtools.clients.perforce import PerforceClient 
from rbtools.clients.plastic import PlasticClient 
from rbtools.clients.clearcase import ClearCaseClient 
from rbtools.clients.bazaar import BazaarClient 
def load_scmclients(options): 
    global SCMCLIENTS 

    SCMCLIENTS = {} 

    if not main_is_frozen(): 
     for ep in pkg_resources.iter_entry_points(group='rbtools_scm_clients'): 
      try: 
       SCMCLIENTS[ep.name] = ep.load()(options=options) 
      except Exception, e: 
       logging.error('Could not load SCM Client "%s": %s' % (ep.name, e)) 
    else: 
     temp_clients = {} 
     temp_clients['svn'] = SVNClient 
     temp_clients['git'] = GitClient 
     temp_clients['mercurial'] = MercurialClient 
     temp_clients['cvs'] = CVSClient 
     temp_clients['perforce'] = PerforceClient 
     temp_clients['plastic'] = PlasticClient 
     temp_clients['clearcase'] = ClearCaseClient 
     temp_clients['bazaar'] = BazaarClient 
     for ep in temp_clients: 
      try: 
       SCMCLIENTS[ep] = temp_clients[ep](options=options) 
      except Exception, e: 
       logging.error('Could not load SCM Client "%s": %s' % (str(ep), e))