[PYTHON] python NameError : 전역 이름 '__file__'이 (가) 정의되지 않았습니다.
PYTHONpython NameError : 전역 이름 '__file__'이 (가) 정의되지 않았습니다.
파이썬 2.7에서이 코드를 실행하면이 오류가 발생합니다.
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
코드는 다음과 같습니다.
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='wehart@sandia.gov',
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']
)
해결법
-
==============================
1.이 오류는 파이썬 대화 형 쉘에서이 줄 os.path.join (os.path.dirname (__ file__))을 추가 할 때 발생합니다.
이 오류는 파이썬 대화 형 쉘에서이 줄 os.path.join (os.path.dirname (__ file__))을 추가 할 때 발생합니다.
파이썬 쉘은 __file__에서 현재 파일 경로를 탐지하지 않으며이 라인을 추가 한 파일 경로와 관련이 있습니다
따라서이 라인 os.path.join (os.path.dirname (__ file__))을 file.py에 써야합니다. python file.py를 실행하면 파일 경로가 필요하기 때문에 작동합니다.
-
==============================
2.파일을 문자열로 취급하여 해결했습니다. 즉, __file__ 대신 "__file__"(따옴표와 함께 입력하십시오)을 넣습니다.
파일을 문자열로 취급하여 해결했습니다. 즉, __file__ 대신 "__file__"(따옴표와 함께 입력하십시오)을 넣습니다.
이것은 나를 위해 잘 작동합니다.
wk_dir = os.path.dirname(os.path.realpath('__file__'))
-
==============================
3.대화 형 통역사를 사용하고 있습니까? 당신이 사용할 수있는
대화 형 통역사를 사용하고 있습니까? 당신이 사용할 수있는
sys.argv[0]
읽어야합니다 : 파이썬에서 현재 실행중인 파일의 경로를 얻으려면 어떻게해야합니까?
-
==============================
4.나는 PyInstaller와 Py2exe에 동일한 문제가있어서 cx-freeze에서 FAQ에 대한 해결책을 찾았습니다.
나는 PyInstaller와 Py2exe에 동일한 문제가있어서 cx-freeze에서 FAQ에 대한 해결책을 찾았습니다.
콘솔 또는 응용 프로그램에서 스크립트를 사용할 때 본 기능은 "실제 파일 경로"가 아닌 "실행 경로"를 제공합니다.
print(os.getcwd()) print(sys.argv[0]) print(os.path.dirname(os.path.realpath('__file__')))
출처: http://cx-freeze.readthedocs.org/en/latest/faq.html
이전 행 (초기 질문) :
def read(*rnames): return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
코드 조각을 다음 스 니펫으로 대체하십시오.
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)
위 코드를 사용하면 애플리케이션을 OS 경로에 추가 할 수 있으므로 앱이 데이터 / 구성 파일을 찾을 수 없다는 문제없이 어디서나 실행할 수 있습니다.
파이썬 테스트 :
-
==============================
5.원하는 모든 것이 현재 작업 디렉토리를 얻는 것이라면 os.getcwd ()는 os.path.dirname (__ file__)과 똑같은 것을 코드에서 다른 위치로 변경하지 않는 한 당신에게 줄 것입니다. os.getcwd ()는 대화식 모드에서도 작동합니다.
원하는 모든 것이 현재 작업 디렉토리를 얻는 것이라면 os.getcwd ()는 os.path.dirname (__ file__)과 똑같은 것을 코드에서 다른 위치로 변경하지 않는 한 당신에게 줄 것입니다. os.getcwd ()는 대화식 모드에서도 작동합니다.
그래서 os.path.join (os.path.dirname (__ file__)) 된다 os.path.join (os.getcwd ())
-
==============================
6.파이썬 쉘에서 명령을 실행하는 경우이 명령을 사용할 수 있습니다.
파이썬 쉘에서 명령을 실행하는 경우이 명령을 사용할 수 있습니다.
>>> __file__ Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name '__file__' is not defined
python 커멘드에 인수로서 건네 주어, 직접 파일을 실행할 필요가 있습니다.
$ python somefile.py
귀하의 경우에는, 정말 python setup.py 설치되어야합니다
-
==============================
7.나는 똑같은 문제점을 가지고 있고 아마 같은 튜토리얼을 사용하고있다. 함수 정의 :
나는 똑같은 문제점을 가지고 있고 아마 같은 튜토리얼을 사용하고있다. 함수 정의 :
def read(*rnames): return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
os.path.dirname (__ file__)은 필요한 것을 반환하지 않기 때문에 버그가 있습니다. os.path.dirname (__ file__)을 os.path.dirname (os.path.abspath (__ file__))으로 바꾸십시오.
def read(*rnames): return open(os.path.join(os.path.dirname(os.path.abspath(__file__)), *rnames)).read()
앤드류 (Andrew)가 현재 문서의 코드 조각이 작동하지 않는다고 게시했습니다. 잘하면 수정 될 것입니다.
-
==============================
8.다음과 같이 코드를 변경하십시오! 그것은 나를 위해 작동합니다. `
다음과 같이 코드를 변경하십시오! 그것은 나를 위해 작동합니다. `
os.path.dirname (os.path.abspath ( "__ file__"))
-
==============================
9.할 수있는 일은 다음을 사용하는 것입니다.
할 수있는 일은 다음을 사용하는 것입니다.
import os if '__file__' in vars(): wk_dir = os.path.dirname(os.path.realpath('__file__')) else: print('We are running the script interactively')
여기서 '__file__'문자열을 사용하면 실제로 __file__이라는 실제 변수를 참조합니다. 당연히 이것을 테스트해볼 수 있습니다 ..
이 솔루션의 추가 보너스는 스크립트를 부분적으로 대화 형으로 (예 : 테스트 / 개발을 위해) 실행하고 명령 줄을 통해 실행할 수있는 유연성입니다.
-
==============================
10.파일이 예상대로 작동하지 않는 경우가 발생했습니다. 그러나 다음은 지금까지 나를 저버리지 않았습니다.
파일이 예상대로 작동하지 않는 경우가 발생했습니다. 그러나 다음은 지금까지 나를 저버리지 않았습니다.
import inspect src_file_path = inspect.getfile(lambda:None)
from https://stackoverflow.com/questions/16771894/python-nameerror-global-name-file-is-not-defined by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 명시 적으로 수락하지 않고 자신을 Python 메소드로 가져 오는 방법 (0) | 2018.11.28 |
---|---|
[PYTHON] 플라스크에서 체크 박스를 선택하는 방법 (0) | 2018.11.28 |
[PYTHON] 큰 출력을 읽을 때 Paramiko 채널이 멈 춥니 다. (0) | 2018.11.28 |
[PYTHON] matplotlib를 사용하는 코드에 대해 단위 테스트를 작성하려면 어떻게해야합니까? (0) | 2018.11.28 |
[PYTHON] 왜 PyQt connect () 구문이 그렇게 장황합니까? (0) | 2018.11.28 |