2016-10-08 2 views
0

프로젝트에서 명확한 파일 구조를 유지하려면 다음 코드 스 니펫을 사용하여 프로젝트 기본 폴더를 PYTHONPATH에 동적으로 추가하므로 위의 파일도 가져올 수 있습니다. 파일 위치. 내가 이런 짓을하기 때문에 내 주요 파일을 시작할 때 내가 수동으로 된 .pyc 파일을 삭제할 때까지동적으로 PYTHONPATH를 업데이트하면 .Pyc 업데이트가 방지됩니다.

import sys 
import os 
sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), ".")) 

, 모듈에 대한 변화는 더 이상 인식되지 않습니다. 따라서 나는 pyc 파일이 최신인지 확인하기 위해 파이썬이 어떤 이유로 든 이것을 가정한다고 가정합니다. 어떤 방법 으로든이 문제를 극복 할 수 있습니까?

답변

1

파이썬이 * .pyc 파일을 쓰지 않도록 할 수 있습니다.

How to avoid .pyc files?

대형 프로젝트의 경우이 성능 측면에서 약간의 문제가있다. 그것은 당신이 신경 쓰지 않아도되고 pyc 파일을 만들 수 없습니다.

+0

를 통해 패키지의 일부로 호출하지 않아야합니다. 비록 내가 왜 이런 일이 일어나고 있는지 알고 싶습니다. – weidler

+0

'sys.modules'는 인터프리터에 의해로드 된 모듈을 포함합니다. PYTHONPATH를 수정하고 일부 새로운 모듈이 이미 있던 것을 덮어 쓰는 경우 새로운 변경 사항이 표시되지 않습니다. 어쨌든 이런 마법을 쓰면 안됩니다. 가능한 한 파일 계층 구조에서 PYTHONPATH를 최대한 높게 설정하면됩니다. 또한 virtualenv를 사용하여 프로젝트 및 다른 종속성을 설치하고 setup.py를 사용하여보다 복잡한 작업을 수행해야합니다. 당신은 simiple 스크립트에서 자라 났고 결코 리팩터링 한 프로젝트가 있습니까? –

1

모듈 이름이 더 이상 고유하지 않으면 이미 가져온 모듈의 경로를 추가하면 문제가 발생할 수 있습니다. import foo을 수행하면 상위 패키지 barsys.path에 추가합니다. 이제 import bar.foo도 가능합니다. 파이썬은 두 모듈을 서로 다른 모듈로 간주하여 모듈 ID에 의존하는 모든 것을 망칠 수 있습니다.

왜 이런 해킹을해야하는지 실제로 고려해야합니다. 당신이 당신의 패키지 내부에 배치 실행 파일이있는 경우

cd bardir/bar 
python foo 

을 대신 더 우아한 해결책이 밤은 만약 내가이 시도됩니다

cd bardir 
python -m bar.foo 
관련 문제