python NameError: global name '__file__' is not defined

前端 未结 12 864
误落风尘
误落风尘 2020-12-02 08:08

When I run this code in python 2.7, I get this error:

Traceback (most recent call last):
File \"C:\\Python26\\Lib\\site-packages\\pyutilib.subprocess-3.5.4\\         


        
12条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-02 08:36

    I had the same problem with PyInstaller and Py2exe so I came across the resolution on the FAQ from cx-freeze.

    When using your script from the console or as an application, the functions hereunder will deliver you the "execution path", not the "actual file path":

    print(os.getcwd())
    print(sys.argv[0])
    print(os.path.dirname(os.path.realpath('__file__')))
    

    Source:
    http://cx-freeze.readthedocs.org/en/latest/faq.html

    Your old line (initial question):

    def read(*rnames):
    return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
    

    Substitute your line of code with the following snippet.

    def find_data_file(filename):
        if getattr(sys, 'frozen', False):
            # The application is frozen
            datadir = os.path.dirname(sys.executable)
        else:
            # The application is not frozen
            # Change this bit to match where you store your data files:
            datadir = os.path.dirname(__file__)
    
        return os.path.join(datadir, filename)
    

    With the above code you could add your application to the path of your os, you could execute it anywhere without the problem that your app is unable to find it's data/configuration files.

    Tested with python:

    • 3.3.4
    • 2.7.13

提交回复
热议问题