2012-10-06 5 views
2

다른 Python 파일 (예 : DisplayTools.py, CollectionTools.py ...)에서 Python 함수를 개발하여 더 일반적인 파일 인 Start.py에서 도구로 가져옵니다. 모든 파일이 같은 디렉토리에 있으면 제대로 작동합니다. Start.py에서 "DisplayTools 가져 오기"라고 말할 수 있습니다 ... 그러나 더 프로젝트 방식으로 사용자 친화적 인 구성 방법 (Start.py 파일에서만 작업해야하는 경우). 예를 들어이 같은 파일 구성을 갖는 경우 :Handling Python 프로젝트 및 파일 구성

  • 프로젝트/

    Start.py

    • 도구/

      DisplayTools.py을

      CollectionTools.py

나는 __init__ 파일의 사용법을 읽었지만 작동 방식, 파일 저장 위치 및 포함 내용은 무엇입니까?

내 프로젝트를 체계적으로 구성 할 수있는 방법을 알려 주시면 도와주세요.

많은 감사

답변

5

나는 코드 조직에게 조금을 리팩토링하고 최상위 디렉토리에 좀 더 설명하는 이름을 줘야 할 것. 오늘은 happy_bananas을 선택합니다. 그럼이 같은 파일을 구성 가정 해 봅시다 : 당신이 할 필요가 빈 __init__.py 파일을 추가한다

happy_bananas 
    start.py 
    DisplayTools.py 
    CollectionTools.py 

그리고 당신은 다른 패키지처럼 사용, 예를 들어 수 있습니다

happy_bananas 
    __init__.py 
    start.py 
    DisplayTools.py 
    CollectionTools.py 

그리고 지금 당신이 할 수있는 경우 :

from happy_bananas import DisplayTools

을 당신이 전에 것처럼.

이제 시스템에 설치하려면 패키지로 설치 스크립트를 사용해야합니다. distutils 또는 setuptools을 사용하여이 작업을 수행 할 수 있지만 가장 간단한 방법은 Zed Shaw의 Learn Python The Hard Way Exercise 46입니다. 당신이 당신의 설치 스크립트 작성 때 다음

happy_bananas 
    setup.py 
    tests 
     test_happy_bananas.py 
    happy_bananas 
     __init__.py 
     start.py 
     DisplayTools.py 
     . 
     . 

는, 당신이 당신의 폴더로 가서 python setup.py install를 실행할 수 있습니다 (또는 : 당신은 정말 거기에 설명 된대로 해당 파일을 붙여 넣기와 같은 디렉토리 구조와 끝까지 복사/단지 수 python setup.py develop) 모든 파일에서 import happy_bananas 수 있어야합니다.

파이썬의 이름 지정 규칙은 파일 및 함수 이름에 snakecase를 사용하는 것입니다. 따라서 DisplayTools.py 대신 display_tools.py으로 이름을 변경하는 것이 좋습니다. CamelCase는 일반적으로 클래스 이름 전용입니다.

+0

좋은 답변이지만 OP에 과도 함일 수 있습니다. –

+0

저는 설치 프로그램을 실제로 사용하지 않습니다. 내가 질문에서 제안한 파일 트리에 따르면, 도구 가져 오기 DisplayTools.py는 (심지어는 Tools 디렉토리의 빈'__init__' 파일을 사용하여) 작동하지 않습니다 ... [namin 협약에 대한 귀하의 의견을 환영합니다] – user1187727

+0

포장입니다 내가 기대하는 훨씬 더 복잡한 진화. 나는 나중에 이것을 처리하려고 노력할 것이다. 예를 들어 Tools/DisplayTools.py에있는 함수에 따라 Start.py를 채우고 싶습니다! – user1187727

0

처음에는 파일을 실행할 수 있기 때문에 단순히 기능 세트와 일부 기본 코드가 변경되었습니다.예를 들어

:

if __name__ == "__main__": 
    dosomething() 

는 다음 주에, 당신은 단순히 다른 스크립트를 가져오고 당신은 실제로 스크립트를 실행하지 않고 거기에 사용되는 기능을 사용할 수 있습니다.