not name python nameerror

name is not defined python function



Python NameError: el nombre global ''__file__'' no está definido (8)

¡Cambie sus códigos de la siguiente manera! esto funciona para mi. `

os.path.dirname (os.path.abspath (" __file__ "))

Cuando ejecuto este código en Python 2.7, obtengo este error:

Traceback (most recent call last): File "C:/Python26/Lib/site-packages/pyutilib.subprocess-3.5.4/setup.py", line 30, in <module> long_description = read(''README.txt''), File "C:/Python26/Lib/site-packages/pyutilib.subprocess-3.5.4/setup.py", line 19, in read return open(os.path.join(os.path.dirname(__file__), *rnames)).read() NameError: global name ''__file__'' is not defined

el código es:

import os from setuptools import setup def read(*rnames): return open(os.path.join(os.path.dirname(__file__), *rnames)).read() setup(name="pyutilib.subprocess", version=''3.5.4'', maintainer=''William E. Hart'', maintainer_email=''[email protected]'', url = ''https://software.sandia.gov/svn/public/pyutilib/pyutilib.subprocess'', license = ''BSD'', platforms = ["any"], description = ''PyUtilib utilites for managing subprocesses.'', long_description = read(''README.txt''), classifiers = [ ''Development Status :: 4 - Beta'', ''Intended Audience :: End Users/Desktop'', ''License :: OSI Approved :: BSD License'', ''Natural Language :: English'', ''Operating System :: Microsoft :: Windows'', ''Operating System :: Unix'', ''Programming Language :: Python'', ''Programming Language :: Unix Shell'', ''Topic :: Scientific/Engineering :: Mathematics'', ''Topic :: Software Development :: Libraries :: Python Modules''], packages=[''pyutilib'', ''pyutilib.subprocess'', ''pyutilib.subprocess.tests''], keywords=[''utility''], namespace_packages=[''pyutilib''], install_requires=[''pyutilib.common'', ''pyutilib.services''] )



Este error aparece cuando agrega esta línea os.path.join(os.path.dirname(__file__)) en el shell interactivo de python.

Python Shell no detecta la ruta actual del archivo en __file__ y está relacionada con su ruta de filepath en la que ha agregado esta línea

Por lo tanto, debe escribir esta línea os.path.join(os.path.dirname(__file__)) en file.py y luego ejecute python file.py , funciona porque toma su ruta de archivo.


Estoy teniendo exactamente el mismo problema y probablemente use el mismo tutorial . La definición de la función:

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

tiene errores, ya que os.path.dirname(__file__) no devolverá lo que necesita. Intente reemplazar os.path.dirname(__file__) con os.path.dirname(os.path.abspath(__file__)) :

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

Acabo de publicar Andrew que el fragmento de código en los documentos actuales no funciona, con suerte, se corregirá.


Lo resolví tratando el archivo como una cadena, es decir, puse "__file__" (¡junto con las comillas!) En lugar de __file__

Esto funciona bien para mi:

wk_dir = os.path.dirname(os.path.realpath(''__file__''))


Obtendrás esto si estás ejecutando los comandos desde el shell de python:

>>> __file__ Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name ''__file__'' is not defined

Necesita ejecutar el archivo directamente, pasándolo como un argumento al comando python :

$ python somefile.py

En tu caso, realmente debería ser la python setup.py install


Si todo lo que busca es obtener su directorio actual de trabajo, os.getcwd() le dará lo mismo que os.path.dirname(__file__) , siempre y cuando no haya cambiado el directorio de trabajo en otro lugar de su código. os.getcwd() también funciona en modo interactivo.

Entonces os.path.join(os.path.dirname(__file__)) convierte en os.path.join(os.getcwd())


Tuve el mismo problema con PyInstaller y Py2exe, así que me encontré con la resolución en las preguntas frecuentes de cx-freeze.

Cuando utilice su secuencia de comandos desde la consola o como una aplicación, las funciones a continuación le entregarán la "ruta de ejecución", no la "ruta real del archivo":

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

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

Tu antigua línea (pregunta inicial):

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

Sustituye tu línea de código con el siguiente fragmento.

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)

Con el código anterior, puede agregar su aplicación a la ruta de su sistema operativo, puede ejecutarla en cualquier lugar sin el problema de que su aplicación no puede encontrar sus archivos de datos / configuración.

Probado con Python:

  • 3.3.4
  • 2.7.13