关于python:使用py2exe时的NameError

NameError when using py2exe

本问题已经有最佳答案,请猛点这里访问。

我正在编写一个程序,该程序使用os.path.abspath(os.path.dirname(__file__)))来定位其配置文件,当我在纯Python中使用该文件时,它的工作方式很迷人,但一旦我使用py2exe将其编译为.exe,就会出现以下错误:

1
2
3
Traceback (most recent call last):
  File (main.py, line 17, in <module>
NameError: name '__file__' is not defined

准确地说,第17行是:

1
if os.path.isfile("%s/config.cfg" % os.path.abspath(os.path.dirname(__file__))):

为什么会发生这种情况,我如何克服这个问题?

事先谢谢!:)


问题是,当您将文件作为输入运行时,由解释器设置__file__,但当您运行py2exed可执行文件时,则不是这样。您通常希望这样做:

1
2
3
4
5
6
if hasattr(sys, 'frozen'):
  # retrieve path from sys.executable
  rootdir = os.path.abspath(os.path.dirname(sys.executable))
else:
  # assign a value from __file__
  rootdir = os.path.abspath(os.path.dirname(__file__))