2013-04-22 4 views
0

에서 가져와야합니다. 설치 스크립트로 첫 번째 Python 패키지를 만들었고이 동작이 정상적인 지 궁금합니다. 액세스하고자하는 클래스가 포함 된 하나의 모듈로 구성됩니다. 프로젝트 구조는 다음과 같습니다.setup.py 후에 모듈을 명시 적으로 패키지

. 
| 
+ -- __init__.py 
+ -- setup.py 
my_package 
    | 
    + __init__.py 
    + my_class.py 

__init__.py은 항상 비어 있습니다. 대신

>>> import my_package 
>>> my_class.MyClass() 
A new object is born! 

나는이 할 경우, 내가 할 만 할 수있는 :

>>> from my_package import my_class 
>>> my_class.MyClass() 
A new object is born! 

내 패키지 내 클래스 파일을있는 내가 그것을 설치하면

이 내가 기대하는 행동입니다 그것이 맞다면 같은 이름을지었습니다. 이것은 잘못된 패키지 디자인의 경우입니까? 나는 from my_class import *__init__.py에 넣음으로써이 문제를 해결할 수 있다는 것을 발견했다.하지만 가져 오기 네임 스페이스에 머물러 있어도 그러한 명령문을 사용하는 것은 싫다.

+1

'my_package'를 가져 오면, 왜'my_class'가 마술처럼 보이기를 기대합니까? – lolopop

+0

네 말이 맞아, 나는 수입이 더 명백해야한다는 것을 이해한다. 'my_class'가 불가사의하게 나타나게하기위한 가장 좋은 방법이 무엇인지 모르겠습니다.) –

+0

이것은 실제로 패키징 관련 질문이 아니며 단지 Python 가져 오기에 익숙한 문제입니다. –

답변

3

import my_packagemy_package/__init__.py에 정의 된 것을 가져 오므로이 동작은 완전히 정상입니다. 해당 모듈에 대한 참조가 없으므로 my_class을 사용할 수 없습니다. 패키지 디자인은 좋은 나쁜인 경우

나도 몰라,하지만 당신은 당신이 my_package을 가져올 때 MyClass을 사용하려는 경우, 단지 스크립트 my_package/__init__.py에이 클래스를 이동합니다.

+0

이 경우 가장 좋은 방법은 무엇입니까? 'from my_package import * '를 사용하면보기 흉하지만 최소한 my_package의 네임 스페이스에 남을 것이므로 어디에서 왔는지 추적 할 수있을 것입니다. 아니면 그것에 대해 갈 수있는 더 좋은 방법이 있습니까? –

+1

@DanielLee'from my_package.my_class import MyClass'와'from my_package import my_class' 모두 괜찮습니다. 일반적으로'from my_package import *'와 같은 import 문은 피하십시오. 자세한 내용은 [문서 FAQ] (http://docs.python.org/2/faq/programming.html#what-are-the-best-practices-for-using-import-in-a- 모듈)도 있습니다. –

관련 문제