[PYTHON] py2exe에서 실행 파일의 현재 디렉토리를 어떻게 얻을 수 있습니까?
PYTHONpy2exe에서 실행 파일의 현재 디렉토리를 어떻게 얻을 수 있습니까?
내 스크립트에서이 코드를 사용하여 크로스 플랫폼 방식으로 정확히 어디에서 실행되는지를 정확히 알려줍니다.
SCRIPT_ROOT = os.path.dirname(os.path.realpath(__file__))
아주 간단합니다. 그런 다음 스크립트의 다른 영역에서 SCRIPT_ROOT을 사용하여 모든 것이 적절히 맞는지 확인합니다. 생성 된 실행 파일이 __file__을 설정하지 않아 py2exe를 통해 실행할 때 내 스크립트가 중단되어 내 스크립트가 중단됩니다. 누구든지이 문제를 해결하거나 해결하는 방법을 알고 있습니까?
해결법
-
==============================
1.다음은 py2exe 설명서입니다. 여기에 관련 항목이 있습니다.
다음은 py2exe 설명서입니다. 여기에 관련 항목이 있습니다.
이러한 문서에서 "exe-file"과 "executable"이 같은지 여부와 sys.executable과 sys.argv [0]가 같은지 여부는 분명하지 않습니다. 필자가 마지막으로 script.py와 py2exe_executable.exe 둘 다 작업 한 코드를 살펴보면 다음과 같은 것을 발견 할 수 있습니다.
if hasattr(sys, 'frozen'): basis = sys.executable else: basis = sys.argv[0] required_folder = os.path.split(basis)[0]
내가 말했듯이 그것이 효과가 있었지만 sys.argv [0]을 사용하는 대신에 왜 이것이 필요하다고 생각했는지 기억하지 못합니다.
기본 작업만으로도 해당 작업에 적합했습니다 (해당 디렉토리의 파일 읽기). 보다 영구적 인 레코드를 얻으려면 os.path.realpath (basis)와 같은 것을 분리하십시오.
업데이트 실제로 테스트를 수행했습니다. 어림짐작과 안락 의자 pontification :-)
요약 : sys.frozen을 무시하고, sys.executable을 무시하고, sys.argv [0]을 무조건 처리하십시오.
증거:
=== foo.py ===
# coding: ascii import sys, os.path print 'sys has frozen:', hasattr(sys, 'frozen') print 'using sys.executable:', repr(os.path.dirname(os.path.realpath(sys.executable))) print 'using sys.argv[0]:', repr(os.path.dirname(os.path.realpath(sys.argv[0] )))
=== setup.py ===
from distutils.core import setup import py2exe setup(console=['foo.py'])
=== 결과 ===
C:\junk\so\py2exe>\python26\python foo.py sys has frozen: False using sys.executable: 'C:\\python26' using sys.argv[0]: 'C:\\junk\\so\\py2exe' # where foo.py lives C:\junk\so\py2exe>dist\foo sys has frozen: True using sys.executable: 'C:\\junk\\so\\py2exe\\dist' using sys.argv[0]: 'C:\\junk\\so\\py2exe\\dist' # where foo.exe lives
-
==============================
2.Py2exe는 __file__을 정의하지 않습니다 : http://www.py2exe.org/index.cgi/Py2exeEnvironment
Py2exe는 __file__을 정의하지 않습니다 : http://www.py2exe.org/index.cgi/Py2exeEnvironment
OP가 py2exe 친화적 인 버전 요청 :
SCRIPT_ROOT = os.path.dirname(os.path.realpath(__file__))
가장 좋은 대답은 python이 exe에서 고정되어 있는지 확인하는 것입니다. py2exe에는 이에 대한 문서가 있습니다. http://www.py2exe.org/index.cgi/HowToDetermineIfRunningFromExe
import imp, os, sys def main_is_frozen(): return (hasattr(sys, "frozen") or # new py2exe hasattr(sys, "importers") # old py2exe or imp.is_frozen("__main__")) # tools/freeze def get_main_dir(): if main_is_frozen(): return os.path.dirname(sys.executable) return os.path.dirname(os.path.realpath(__file__)) SCRIPT_ROOT = get_main_dir()
파이썬은 EAFP이기 때문에 여기 EAFP 버전이 있습니다 ...
try: if sys.frozen or sys.importers: SCRIPT_ROOT = os.path.dirname(sys.executable) except AttributeError: SCRIPT_ROOT = os.path.dirname(os.path.realpath(__file__))
건배!
-
==============================
3.이 시도:
이 시도:
import os import sys os.path.realpath(os.path.dirname(sys.argv[0]))
from https://stackoverflow.com/questions/2292703/how-can-i-get-the-executables-current-directory-in-py2exe by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 왜 내가 TypeError를 얻는가? 'float'타입이 아닌 int로 시퀀스를 곱할 수 없습니까? (0) | 2018.10.14 |
---|---|
[PYTHON] 파이썬 : HTTP 스트리밍으로 큰 파일 게시 (0) | 2018.10.13 |
[PYTHON] 동사 / 명사 / 형용사간에 단어를 변환하십시오. (0) | 2018.10.13 |
[PYTHON] generator / iterable / iterator가있는 Python 무작위 샘플 (0) | 2018.10.13 |
[PYTHON] 선언 된 것과 같은 순서로 클래스 속성을 읽는 방법? (0) | 2018.10.13 |