주어진 모듈에 대한 py
파일의 파일 시스템 위치를 런타임에 안정적으로 발견하는 가장 좋은 방법을 찾으려고합니다. 일부 메소드 (이 경우 인터페이스가 모듈에 정의 된 서비스 호출의 응답을 검증하는 데 사용되는 스키마)에 대한 일부 구성 데이터를 정리할 계획이므로 청결하고 유지 보수가 쉽기 때문에이 작업을 수행해야합니다.모듈의 py 파일 경로를 신뢰할 수있는 방법
시스템의 단순화 illusutration :
package
|
|-service.py
|
|-call1.scm
|
|-call2.scm
service.py (즉 무관 비록 _call()
는 질문에, 기본 클래스의 방법이다)
class FooServ(AbstractService):
def call1(*args):
result = self._call('/relative/uri/call1', *args)
# additional call specific processing
return result
def call2(*args):
result = self._call('/relative/uri/call2', *args)
# additional call specific processing
return result
call1.scm 및 call2 .scm 응답 스키마를 정의합니다 (현재의 경우 초안 JSON 스키마 형식을 사용하여 다시 질문과 관련 없음)
다른 p 레이스를 코드베이스에서 서비스 호출이 실제로 만들어지면 service.py
의 위치를 감지하여 파일 구조를 탐색하고 scm 파일을 찾을 수 있기를 원합니다. 내 시스템에 적어도, 나는이 일 것이라고 생각 :
# I realize this is contrived here, but in my code, the method is accessed this way
method = FooServ().call1
module_path = sys.modules[method.__self__.__class__.__module__].__file__
schema_path = os.path.join(os.path.dirname(module_path), method.__name__ + '.scm')
그러나, 나는이 모든 플랫폼 및 설치 구성에 안전 할 것입니다 있는지 확인하고 싶어하고, 연구를하고있는 동안 나는 this 건너 온 나를 만든있는 이 방법을 이렇게하면 신뢰성있게 작동하지 않을 것이라고 우려했습니다. 이 기능은 보편적으로 작동합니까, 아니면 모듈 객체의 __file__
이 pyc
파일의 위치를 반환합니다. 이는 py
파일이 아닌 다른 위치에있을 수 있습니다.이 솔루션을 비효율적으로 만들려고합니까? 효과가 없다면 대신 무엇을 할 수 있습니까? 에서
저는 Python 2.7을 사용 중입니다. 나는 많은 인터프리터와 OS 구성이 pyc 파일 생성을 처리하는 우연한 방법과 모순 된 방법에 대해 이야기하는 텍스트의 큰 덩어리에 더 관심이있었습니다. –
편집자에게 : 그건 의미가 있습니다. 나는 맥과 다른 플랫폼을 추적하여 그곳에서 무슨 일이 일어나는지 보려고 노력할 것이라고 생각하지만, 이제는 일이 잘 될 것이라고 확신한다. 감사. –
나는이 문제가 모든 플랫폼에서 중요하다는 것을 확인 했으므로 나는 훌륭하다고 생각한다. 다시 한번 감사드립니다. –