문제

나는 실행하는 py2exe 컴파일된 파이썬 프로그램 중 하나에서 서버는 기계에서 다수의 클라이언트 컴퓨터(에 매핑된 네트워크 드라이브는 모든 컴퓨터에서,말 W:).

Windows XP 이상의 컴퓨터,지금까지 연결 Python 기 W:\python23.dll (예,내가 사용하는 파이썬 2.3.5 에 대한 W98 호환성 및 모든다).그런 다음 사용 W:\zlib.pyd 압축을 해제 W:\library.zip 을 포함하는 모든다.pyc 파일과 같은 os 와 같은 다음 가져와 프로그램이 실행되 아무 문제 없습니다.

문제는 나에 어떤 Windows98SE 기계(주의:Windows98SE 기계,다른 사람 작동하는 것으로 명백한 문제).어 프로그램을 실행에서 W:이,W:\python23.dll 입니다,나는 가정이 발견되기 때문에(나 Python ImportErrors,우리가 필요합을 실행할 수 있는 파이썬 가져서),그러나 몇 가지 작동하지 않:

는 경우 1)W:\library.zip 함만 복사합니다.pyc 파일을 나 ZipImportError: can't decompress data; zlib not available (넌센스,고려 W:\zlib.pyd 사용할 수 있고 잘 작동 XP 과 높은 기계에는 동일한 네트워크)에 있습니다.

2)경우다.pyc 파일이 실제로 내장되는 파이썬 exe 의 py2exe,또는 동일한 디렉터리로.exe 거나라는 하위 디렉토리에 있는 다음 설정의 일부분으로 PYTHONPATH 변수(e.g W:\pylib),나 ImportError: no module named os os(첫번째 모듈이 수입되기 전에 sys 와 아무것도).

그것을 생각하는 sys.경로 없을 사용할 수 있는 경우 검색 os 었는 수입 전에 그것은 어쩌면?해을 전환하기 위해 사람들의 수입이지만 나의 질문은 여전히:왜 이런 산발적 문제에서 작업,일부 네트워크지만 다른 사람에 대?과 내가 어떻게 힘 Python 파일을 찾을 묶음으로 표시되는 내부에는 매우 실행 실행?나는 즉시 액세스할 수 있어 작업 Windows98SE 기계,하지만 나만 액세스하는 작동하지 않는 하나의(고객의 광산)매일 아침하기 전에 자신의 저장소가 열립니다.

사전에 감사합니다!


편집:좋아요,앞으로 큰 단계입니다.후에 디버깅 PY2EXE_VERBOSE,문제에서 발생하는 특정 W98SE 기계는 사용하지 않는 올바른 경로로 구문을 찾을 때 수입품입니다.첫째로,그것은 보이지 않을 읽 PYTHONPATH 환경변수(수 있습 py2exe-특정 한 나는 알고,다음과 같 PY2EXE_VERBOSE).

둘째로,그것만 보이는 한 장소에서 포기하기 전에(있을 경우 파일이 제공되 내부 EXE,그것은 보인다.하지 않을 경우,그것은 외모에서 library.zip).

편집 2:사실에 따라, ,사이에는 차이가 있는 sys.경로는 파이썬 및 Py2exe 실행 파일.특히, sys.path contains only a single entry: the full pathname of the shared code archive. Blah.No 대체?심지어는 현재 작업 디렉터리?나도 추가 W:\ 경로,하지만 py2exe 에 따르지 않는 어떤 종류의 표준에 대한 위치 설정 시스템 라이브러리,그래서 그것은 작동하지 않습니다.

지금에 대한 재미있는 비트입니다.경로를 로드하려고 하는 atexit,os,etc.에서는:

W:\\library.zip\<module>.<ext>

참고 하나의 슬래시 후 library.zip 지만,더블 슬래시 드라이브 문자(사람의 경우 이것은 의도 작동하).그것은 다음과 같은 경우 이 문자열한 다음 이후에 슬래쉬가 없는 두 배로,그것을 읽으로(잘못된)시퀀스는 원자 인쇄(주고 W:\library.zipos.pyd, W:\library.zipos.dll, ... 대신 슬래쉬로);되지 않은 경우 a literal string,더블 슬래쉬하지 않을 수 있습 normpath 고 자동으로(그것이 있어야로)그리고 이중 슬래시 혼동하 모듈 loader.내가 말했듯이,수 없 set PYTHONPATH=W:\\library.zip\\ 기 때문에 그것을 무시하는 변수입니다.

그것은 가치가 있을 수 있습니다 사용하는 sys.경로에 있습니다.추가 시작에서의 내 프로그램이지만 하드 코딩 모듈로 절대 마지막 리조트 특히 때문에,이 문제가 발생합니다 하나의 구성에서의 오래된 OS.

어떤 아이디어가?나는 하나의하는 것입니다 normpath 의 sys.path..연민이 필요해요 os 니다.또 다른 단지 추가 os.getenv('PATH')os.getenv('PYTHONPATH') 을 sys.경로...다시 필요 os 모듈입니다.이 site 모듈은 또한 실패를 초기화하는,그래서를 사용할 수 없습니다.pth 파일입니다.

나 또한 최근에도 다음과 같은 코드의 시작에서는 프로그램:

for pth in sys.path:
    fErr.write(pth)
    fErr.write(' to ')
    pth.replace('\\\\','\\') # Fix Windows 98 pathing issues
    fErr.write(pth)
    fErr.write('\n')

하지만 그것을 할 수 없을 로드 linecache.pyc,또는 다른 것은 그 문제에 대한;그것은 수 없습니다 실제로 실행하는 그 명령에서 보이는 것입니다.어떤 방법이 사용하는 기본 제공 기능이 필요하지 않 linecache 를 수정을 sys.경로를 동적으로?또는 나는 감소한 하드 코딩하는 올바른 sys.path?

도움이 되었습니까?

해결책 2

문제는 더 이상 문제에 대한 날,내가 찾은 대안 솔루션(지 않을 수도 있습니다 또는 관련 종료 내 일)입니다.이것을 받아들이 대답할 때까지 다른 누군가를 제공할 수 있는 더 만족스러운 해결책이 아니다.

다른 팁

이것은 직접 응답하지만,가능하게 어떤 도움이됩니다.는 익숙한 당신 -v 옵션에서는 Python.유형 python -h 여 자세히 알아보세요.참고 해당하는 PYTHONVERBOSE 환경변수에 대한 py2exe 고 싶은 스크립트 PY2EXE_VERBOSE, 설명된 대로 거의 아무것도를 제외하고 이 게시물의 저자.분명히 그것은 걸릴 수 있습니다 값이 1 또는 2,같은 기본적으로 -v-vv, 하지만,약간 다르 어떻게 작동 PYTHONVERBOSE.

참고 또한 귀하의 sys.길이:여부를 당신을 가져온 sys 이미지가 영향받는 일은 없을 것이라 할 수 있는지 여부에 가져오기 os.즉,Python path(에서 볼 수 sys.path)항상 사용할 수 있는 의미에서 그것을 반영하는 내부의 기능이 통역관이 있는지 여부를 당신을 가져오는 sys 모듈 또는하지 않습니다.

로와 숫자의 기타 모듈 sys 이 내장되어,그래서 항상 가져올 수있을 경우에도 귀하의 응용 프로그램은 거의 완전히 불구하고.도움이 될 것입니다 경우에,당신은 사용할 수 있습니다 sys.builtin_module_names 무엇을 보고 그들은 당신의 버전의 Python.는 경우 인터프리터에서 실행한 모든 정보는 사용할 수 있도록 다음과 같을 수 있습니다 가장 작은 유용 프로그램을 만들 수 있습을 볼 수 당신은 무엇을 가지고있어:

import sys
print sys.builtin_module_names

또한,나는에 대해 조언하려고 멋진 아무것도 좋아 번들.pyc 파일 내부에.exe.당신은 이미 충분히 작업에 대하여 당신이 갇혀있을 지원하 Win98,그리고 내가 당신이라면 내가 가장 간단한 방법게 작업을 수행하고 이동을 더 재미있는 지역입니다.할 수 있다면 Python 을 설치하고 일반적으로 소스에서 실행하는,당신은 확실히 그것을 고려!:)

편집 포함하는 링크를 PY2EXE_VERBOSE 당 정보에 의해 코멘트 darvids0n.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top