无法运行包含单例的已编译应用程序

时间:2012-09-18 16:36:16

标签: python singleton pyqt pyqt4 py2exe

我在运行包含单例的编译应用程序时遇到问题,.pyw编译过程很顺利,但是当我尝试运行生成的.exe时,它会写一个错误日志,显示如下所示的消息:

Traceback (most recent call last):
  File "main.pyw", line 16, in <module>
  File "tendo\singleton.pyc", line 20, in __init__
AttributeError: 'module' object has no attribute '__file__'

这就是我打电话给单身人士的方式:

from tendo import singleton
me = singleton.SingleInstance()

1 个答案:

答案 0 :(得分:1)

sys.modules['__main__'].__file__的{​​{3}}单例模块tendo以查找主目录。在py2exe中它不存在,这就是你得到这个错误的原因。

您可以使用makes use进行修复。在tendo / singleton.py第20行,你有:

self.lockfile = os.path.normpath(tempfile.gettempdir() + '/' +
  os.path.splitext(os.path.abspath(sys.modules['__main__'].__file__))[0] \
  .replace("/","-").replace(":","").replace("\\","-") + '-%s' % flavor_id +'.lock')

替换为以下内容:

path_to_script = get_main_dir()  #see linkd answer
self.lockfile = os.path.normpath(tempfile.gettempdir() + '/' +  path_to_script
  .replace("/","-").replace(":","").replace("\\","-") + '-%s' % flavor_id +'.lock')

向作者报告此问题,并/或使用修复程序发出拉取请求。