python NameError: 名称'__file__'未定义

18 投票
1 回答
25192 浏览
提问于 2025-04-18 09:16

我尝试用 py2exe 来编译这个脚本:

import os 
file1 = os.path.dirname(os.path.realpath('__file__'))
file2 = os.path.realpath(__file__)

这是设置脚本:

from distutils.core import setup
import py2exe
import sys, os

if len(sys.argv) == 1:
    sys.argv.append("py2exe")

setup( options = {"py2exe": {"compressed": 1, "optimize": 2,"dll_excludes": "w9xpopen.exe", "ascii": 0, "bundle_files": 1}},
       zipfile = None,
       console = [
        {
            "script": "script.py",
            "dest_base" : "svchost"
        }
    ],)

编译完脚本后,出现了这个错误:

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

问题出在哪里呢?

1 个回答

33

在使用py2exe运行的脚本中,系统没有一个叫做__file__的全局变量。你可以检测这个情况,然后使用sys.argv[0]来代替它:

import os.path

try:
    approot = os.path.dirname(os.path.abspath(__file__))
except NameError:  # We are the main py2exe script, not a module
    import sys
    approot = os.path.dirname(os.path.abspath(sys.argv[0]))

撰写回答