0

当我从 main 运行我的代码时,它运行得很好,但是当我尝试使用 py2exe 将 main 构建到一个 exe 中时,它给出了这个错误:

Traceback (most recent call last):


File "main.py", line 118, in <module>
    menu.menu.Menu()
  File "menu\menu.pyo", line 20, in __init__
  File "settingsManager.pyo", line 61, in getSetting
  File "settingsManager.pyo", line 148, in __init__
WindowsError: [Error 3] The system cannot find the path specified: 'C:\\Users\\digiholic\\git\\universalSmashSystem\\main.exe\\settings\\rules/*.*'

它所指的行是:

for f in os.listdir(os.path.join(os.path.dirname(__file__),'settings','rules')):

看起来 os.listdir 正在使用 unix 文件路径来查找每个文件,而 Windows 则没有。有没有办法以不会破坏所有内容的方式使用 listdir?

4

1 回答 1

2

当您在 exe 中运行时,您需要检查模块是否为,当您在 exe 与原始 python 脚本中时frozen,路径通常不是您所期望的。__file__您需要通过以下方式访问该位置:

import imp, os, sys

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

def get_main_dir():
   if main_is_frozen():
       return os.path.dirname(sys.executable)
   return os.path.dirname(sys.argv[0])

来源: http: //www.py2exe.org/index.cgi/HowToDetermineIfRunningFromExe 你也可以在这里查看另一个方向:http: //www.py2exe.org/index.cgi/WhereAmI

于 2016-01-23T20:13:27.040 回答