2016-07-28 4 views
0

에서 패키지의 모든 클래스 이름이 같은 패키지 구조를 가지고 A/__init__.py은 클래스 A1 및 A2를 포함하고, B/__init__.py은 클래스 B1 및 B2를 포함하고, C/__init__.py은 클래스 C1 및 C2를 포함한다. A/__init__.py에서 A와 하위 패키지의 모든 클래스 이름을 __all__에 추가합니다.목록 파이썬

이제 모든 패키지 이름과 포함 된 클래스 이름을 인쇄하고 싶습니다.

A를, C는 C1을 포함는 A1, A2는, B는 B1, B2가 들어 C2 포함

그래서 패키지 A, 예를 들어 절대 경로 주어진 'xx/yy/A', 위의 줄을 어떻게 인쇄 할 수 있습니까?

제 질문은 패키지의 파일 경로를 검색하는 방법이 아닙니다.

+0

[파이썬 모듈 경로 가져 오기] (http://stackoverflow.com/questions/247770/retrieving-python-module-path) –

+0

@WayneWerner 감사합니다. 그러나 제공된 링크는 내 질문과 관련이 없습니다. – james

답변

0

나는 밖으로 몇 가지 코드를 발굴하려고 노력하지만 것입니다 일반적으로 : 당신이 그것을 가져올 사용 importlib을 찾을 파일

  1. 워크 'os.walk'모든 파이썬
  2. 를 사용하여 패키지의 폴더와 파일을 통해

    .
  3. 가져온 모든 모듈에 대해 'inspect'표준 라이브러리 모듈의 함수를 사용하여 가져온 각 모듈 내에서 클래스를 식별합니다.

절대 경로를 기반으로 모듈을 가져 오는 좋은 방법이 없습니다. 가져 오기 프로세스는 기존 모듈을 기준으로하거나 sys.path의 항목을 기준으로 경로를 가져 와서 작동합니다. 옵션은 sys.path에 패키지의 루트를 강제로 추가하는 것일 수 있습니다 - 그리고 모든 파일에 대해 모듈의 점으로 구분 된 모듈 이름을 찾아야합니다.

2
print(os.path.dirname(os.path.abspath(A.__file__))) 

또는 당신은 마음에 다른 뭔가 있었나요?

업데이트 : 패키지 A를 가져 오지 않은

경우, 어떻게 그것이 A.__file__를 사용하여 참조 할 수 있습니다?

아마도, 쉬운 방법이 없습니다. 이라는 폴더/파일을 찾으려면 import mechanism does을 찾고 그 다음을 보면 알 수 있습니다.

이 패키지의 절대 폴더 경로 만 알고 있습니다.

하지만 이미 디스크에있는 패키지의 위치를 ​​알고 당신이 그것을 가져올처럼 그것이 as a package를 설치하지 비록 소리가 있습니다. 너 과 비슷하지만 그렇게해서는 안된다.

+0

감사하지만이 내 질문에 대답하지 않습니다. – james

+0

귀하의 * 원래 * 질문에 답변했습니다. * 다른 질문은 아마도 당신이 물어 본 질문과 근본적으로 다르기 때문에 질문했을 것입니다. –

+0

죄송합니다. 귀하의 답변이 너무 빨리 나와 제대로 편집 할 수 없습니다. 그러나 질문 제목은 내가 무엇을 찾고 있는지 말해 주었다. 패키지 아래에 모든 클래스 이름을 인쇄합니다. 그리고이 패키지를 파일 경로를 통해 가져오고 싶습니다. – james