pythonNameError: 글로벌 이름 '__file_'이(가) 정의되지 않았습니다.
이 코드를 python 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']
)
는 이 할 때 합니다.os.path.join(os.path.dirname(__file__))파이썬 대화형 셸에서.
Python Shell에서 현파경검않습에서 현재 .__file__그리고 그것은 당신의 것과 관련이 있습니다.filepath이 이 행을 .
이 을 래서당은이대써합야니다를사그신▁this▁line▁write합다니▁so▁should써야▁you라고 써야 합니다.os.path.join(os.path.dirname(__file__))file.py그리고 나서 뛰어요.python file.py파일 경로를 사용하기 때문에 작동합니다.
저는 PyInstaller와 Py2exe에 동일한 문제가 있어서 cx-freeze에서 FAQ에 대한 해결책을 발견했습니다.
콘솔에서 스크립트를 사용하거나 응용 프로그램으로 사용할 때 아래의 기능은 "실제 파일 경로"가 아닌 "실행 경로"를 제공합니다.
print(os.getcwd())
print(sys.argv[0])
print(os.path.dirname(os.path.realpath('__file__')))
다음과 같습니다.
http://cx-freeze..org/en/latest/faq.htmlhttp ://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 경로에 응용프로그램을 추가할 수 있으며, 응용프로그램이 데이터/구성 파일을 찾을 수 없는 문제 없이 어디서나 응용프로그램을 실행할 수 있습니다.
파이썬으로 테스트됨:
- 3.3.4
- 2.7.13
제가 우연히 발견한 사건은__file__예상대로 작동하지 않습니다.하지만 지금까지 다음은 저를 실망시키지 않았습니다.
import inspect
src_file_path = inspect.getfile(lambda: None)
이것은 C와 유사한 파이썬에 가장 가까운 것입니다.__FILE__.
파이행의 __file__의 C 것많는다릅다니이와 많이 .__FILE__C 버전은 원본 파일의 원래 경로를 제공합니다.이 기능은 오류를 기록하고 버그가 있는 원본 파일을 파악하는 데 유용합니다.
파이의__file__현재 실행 중인 파일의 이름만 제공하므로 로그 출력에 그다지 유용하지 않을 수 있습니다.
코드를 다음과 같이 변경합니다!저한테는 효과가 있어요.`
os.path.dirname(os.path.abspath("__file__"))
파일 .py 파일: 사용os.path.abspath(__file__)스크립트에서 직접 또는 주피터 노트북에서 코드를 사용하는 경우:파일을 이중 따옴표 안에 넣습니다. os.path.abspath("__file__")
당신은 대화형 통역기를 사용하고 있습니까?사용할 수 있습니다.
sys.argv[0]
다음을 읽어야 합니다.파이썬에서 현재 실행된 파일의 경로를 가져오려면 어떻게 해야 합니까?
현재 작업 디렉토리를 가져오는 것만 원하는 경우os.getcwd()와 같은 것을 당신에게 줄 것입니다.os.path.dirname(__file__)코드의 다른 곳에서 작업 디렉터리를 변경하지 않은 경우. os.getcwd()대화형 모드에서도 작동합니다.
그렇게os.path.join(os.path.dirname(__file__))된다os.path.join(os.getcwd())
python 셸에서 명령을 실행하는 경우 다음과 같이 표시됩니다.
>>> __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 install
명령줄을 통해 파일을 실행하는 경우 이 해킹을 사용할 수 있습니다.
import traceback
def get_this_filename():
try:
raise NotImplementedError("No error")
except Exception as e:
exc_type, exc_value, exc_traceback = sys.exc_info()
filename = traceback.extract_tb(exc_traceback)[-1].filename
return filename
이것은 언리얼 엔진 파이썬 콘솔에서 저에게 효과가 있었고, 전화했습니다.py.exec myfile.py
다음과 같은 주피터 노트북을 사용하는 경우:
MODEL_NAME = os.path.basename(파일)[:-3]
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-10-f391bbbab00d> in <module>
----> 1 MODEL_NAME = os.path.basename(__file__)[:-3]
NameError: name '__file__' is not defined
당신은 이렇게 앞에 '!'를 놓아야 합니다.
!MODEL_NAME = os.path.basename(__file__)[:-3]
/bin/bash: -c: line 0: syntax error near unexpected token `('
/bin/bash: -c: line 0: `MODEL_NAME = os.path.basename(__file__)[:-3]'
완료...
저도 똑같은 문제를 겪고 있고 아마 같은 튜토리얼을 사용하고 있을 것입니다.함수 정의:
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()
저는 앤드류에게 현재 문서의 코드 스니펫이 작동하지 않는다고 게시했습니다. 바라건대, 그것이 수정되기를 바랍니다.
로컬 파일 경로를 가져오는 방법을 사용할 수 있습니다.
if not os.path.isdir(f_dir):
os.mkdirs(f_dir)
try:
approot = os.path.dirname(os.path.abspath(__file__))
except NameError:
approot = os.path.dirname(os.path.abspath(sys.argv[1]))
my_dir= os.path.join(approot, 'f_dir')
주피터 노트북에서 작업하는 경우 작업 중인 스크립트에 따라 작업 공간을 설정하는 것이 편리합니다.
import os
import sys
os.chdir(Path(os.path.realpath('__file__')).parents[0])
sys.path.append(Path(os.path.realpath('__file__')).parents[0])
언급URL : https://stackoverflow.com/questions/16771894/python-nameerror-global-name-file-is-not-defined
'codememo' 카테고리의 다른 글
| numpy.array() 데이터를 올바르게 저장하고 로드하는 방법은 무엇입니까? (0) | 2023.07.17 |
|---|---|
| gunicorn 소스 변경 시 자동 재로드 (0) | 2023.07.17 |
| NumPy: max()와 min()을 동시에 사용하는 함수 (0) | 2023.07.17 |
| 각진 강한 유형의 반응형 (0) | 2023.07.17 |
| Oracle SQL에서 상위 행의 모든 재귀 자식을 검색하는 방법은 무엇입니까? (0) | 2023.07.17 |