python - 컴파일 - 파이썬 프로젝트 예제




파이썬 애플리케이션을위한 최고의 프로젝트 구조는 무엇입니까? (6)

파이썬에서 최종 사용자 데스크톱이 아닌 (웹이 아닌) 응용 프로그램을 개발하고 싶다고 상상해보십시오. 프로젝트의 폴더 계층 구조를 구성하는 가장 좋은 방법은 무엇입니까?

바람직한 기능은 유지 관리의 용이성, IDE 친 화성, 소스 제어 분기 / 병합에 대한 적합성 및 설치 패키지 생성 용이성입니다.

특히:

  1. 근원은 어디에 두시겠습니까?
  2. 애플리케이션 시작 스크립트는 어디에 두어야합니까?
  3. IDE 프로젝트 크래프트는 어디에 두는가?
  4. 단위 / 수락 테스트는 어디에 두시겠습니까?
  5. 구성 파일과 같은 비 파이썬 데이터는 어디에 두어야합니까?
  6. 어디서 C + +와 같은 비 파이썬 소스를 pyd / 바이너리 확장 모듈에 넣을까요?

"Python Packaging Authority"에는 샘플 프로젝트가 있습니다.

https://github.com/pypa/sampleproject

파이썬 패키징 사용자 가이드의 패키징 및 배포에 대한 자습서에 도움이되는 예제 프로젝트입니다.


Jean-Paul Calderone의 Python 프로젝트 파일 시스템 구조에 따르면 :

Project/
|-- bin/
|   |-- project
|
|-- project/
|   |-- test/
|   |   |-- __init__.py
|   |   |-- test_main.py
|   |   
|   |-- __init__.py
|   |-- main.py
|
|-- setup.py
|-- README

너무 중요하지 않습니다. 너를 행복하게 만드는 것은 무엇이든 작동 할 것이다. 파이썬 프로젝트는 간단 할 수 있기 때문에 바보 같은 규칙은 많지 않습니다.

  • /scripts 또는 /bin 과 같은 종류의 명령 줄 인터페이스 물건
  • /tests 테스트
  • /lib C 언어 라이브러리 용 /lib
  • 대부분의 문서는 /doc
  • /apidoc 에있는 Epydoc에서 생성 된 API 문서.

그리고 최상위 디렉토리는 README, Config 및 기타 등을 포함 할 수 있습니다.

어려운 선택은 /src 트리를 사용할지 여부입니다. 파이썬은 /src , /lib , /bin 과 같이 Java 나 C와는 구별되지 않습니다.

최상위 /src 디렉토리는 의미가 없으므로 최상위 디렉토리는 애플리케이션의 최상위 아키텍처가 될 수 있습니다.

  • /foo
  • /bar
  • /baz

나는이 모든 것을 "name-of-my-product"디렉토리 밑에 둘 것을 권한다. 따라서 quux 라는 이름의 응용 프로그램을 작성하는 경우이 모든 것을 포함하는 디렉토리의 이름은 /quux 입니다.

다른 프로젝트의 PYTHONPATHQUUX.foo 모듈을 재사용 /path/to/quux/foo 를 포함 할 수 있습니다.

제 경우에는 Komodo Edit를 사용하기 때문에 IDE cuft는 하나의 .KPF 파일입니다. 나는 실제로 그것을 최상위 /quux 디렉토리에두고 SVN에 추가하지 않았다.


파이썬이 아닌 데이터는 setuptoolspackage_data 지원을 사용하여 파이썬 모듈 내에서 번들링하는 것이 가장 좋습니다. 한 가지 강력하게 권장하는 것은 네임 스페이스 패키지를 사용하여 여러 프로젝트에서 사용할 수있는 공유 네임 스페이스를 만드는 것입니다. 이는 com.yourcompany.yourproject 에 패키지를 배치하는 Java 규칙과 매우 비슷합니다 (공유 com.yourcompany.utils 네임 스페이스를 가질 수 있음).

다시 분기하고 병합하면 소스 제어 시스템을 충분히 사용하면 이름 변경을 통해 병합을 처리 할 수 ​​있습니다. Bazaar 는 특히이 점이 좋습니다.

다른 답변과는 달리 src 디렉토리 ( doc 디렉토리와 test 디렉토리가 함께 있음)가있는 경우 +1입니다. 문서 디렉토리 트리에 대한 특정 규칙은 사용중인 항목에 따라 다릅니다. 예를 들어 Sphinx 는 빠른 시작 도구에서 지원하는 고유 한 규칙을 사용합니다.

제발, setuptools 및 pkg_resources 활용하십시오; 이렇게하면 다른 프로젝트가 특정 버전의 코드에 의존하는 것이 훨씬 쉬워집니다 ( package_data 사용하는 경우 다른 비 코드 파일과 함께 여러 버전을 동시에 설치하는 경우).


파이썬 프로젝트의 오픈 소싱 (Open Sourcing)에 대해 알아보십시오.

그 훌륭한 기사의 프로젝트 레이아웃 부분을 ​​발췌 해 보겠습니다.

프로젝트를 설정할 때 레이아웃 (또는 디렉토리 구조)이 중요합니다. 현명한 레이아웃은 잠재적 인 기여자가 코드 조각을 영원히 사냥 할 필요가 없다는 것을 의미합니다. 파일 위치는 직관적입니다. 우리가 기존 프로젝트를 다루고 있기 때문에, 아마 당신은 약간의 물건을 움직일 필요가 있음을 의미합니다.

맨 위에서 시작합시다. 대부분의 프로젝트에는 setup.py, README.md, requirements.txt 등과 같은 많은 수의 최상위 파일이 있습니다. 모든 프로젝트에 있어야하는 세 개의 디렉토리가 있습니다.

  • 프로젝트 문서가 포함 된 docs 디렉토리
  • 실제 파이썬 패키지를 저장하는 프로젝트 이름으로 이름 붙여진 디렉토리
  • 두 위치 중 하나에있는 테스트 디렉토리
    • 테스트 코드 및 리소스가 포함 된 패키지 디렉토리 아래
    • 독립형 최상위 디렉토리로 파일 구성 방법에 대한 이해를 돕기 위해 sandman이라는 프로젝트 중 하나에 대한 레이아웃의 간단한 스냅 샷을 보여줍니다.
$ pwd
~/code/sandman
$ tree
.
|- LICENSE
|- README.md
|- TODO.md
|- docs
|   |-- conf.py
|   |-- generated
|   |-- index.rst
|   |-- installation.rst
|   |-- modules.rst
|   |-- quickstart.rst
|   |-- sandman.rst
|- requirements.txt
|- sandman
|   |-- __init__.py
|   |-- exception.py
|   |-- model.py
|   |-- sandman.py
|   |-- test
|       |-- models.py
|       |-- test_sandman.py
|- setup.py

보시다시피, 최상위 레벨 파일들, docs 디렉토리 (sphinx가 생성 된 문서를 넣을 빈 디렉토리), sandman 디렉토리 및 sandman 아래의 test 디렉토리가 있습니다.


python_boilerplate 템플릿을 사용하여 프로젝트를 시작하십시오. 대부분 베스트 프랙티스를 따릅니다 (예 : 여기에있는 ). 그러나 프로젝트를 한 곳에서 여러 개 이상의 egg로 분할하려는 경우에 더 적합합니다. (그리고 나를 믿어. 가장 단순한 프로젝트를 제외하고는. 일반적인 상황은 다른 사람의 라이브러리를 로컬로 수정 한 버전을 사용해야하는 경우입니다.

  • 근원은 어디에 두시겠습니까?

    • 상당히 큰 프로젝트의 경우 소스를 여러 개의 알로 나눠 놓는 것이 좋습니다. 각 달걀은 PROJECT_ROOT/src/<egg_name> 별도의 setuptools-layout으로 갈 것입니다.
  • 애플리케이션 시작 스크립트는 어디에 두어야합니까?

    • 이상적인 옵션은 응용 프로그램 시작 스크립트를 하나의 entry_pointentry_point 로 등록하도록하는 것입니다.
  • IDE 프로젝트 크래프트는 어디에 두는가?

    • IDE에 따라 다릅니다. 많은 사람들이 프로젝트 루트에있는 PROJECT_ROOT/.<something> 에 물건을 보관하고 있습니다.
  • 단위 / 수락 테스트는 어디에 두시겠습니까?

    • 각각의 난에는 PROJECT_ROOT/src/<egg_name>/tests 디렉토리에 별도의 테스트 세트가 있습니다. 개인적으로 py.test 를 사용하여 실행하는 것을 선호합니다.
  • 구성 파일과 같은 비 파이썬 데이터는 어디에 두어야합니까?

    • 그것은 달려있다. 파이썬 이외의 다른 유형의 데이터가있을 수 있습니다.
      • "자원" , 즉 알 속에 포장되어야하는 데이터. 이 데이터는 패키지 네임 스페이스의 어딘가에있는 해당 달걀 디렉토리에 저장됩니다. pkg_resources 패키지를 통해 사용할 수 있습니다.
      • "구성 파일" , 즉 프로젝트 소스 파일의 외부 파일로 간주되지만 응용 프로그램 실행이 시작될 때 일부 값으로 초기화되어야하는 비 파이썬 파일. 개발 중에 나는 이러한 파일을 PROJECT_ROOT/config 에 보관하는 것을 선호합니다. 배포에는 다양한 옵션이있을 수 있습니다. Windows에서는 %APP_DATA%/<app-name>/config , Linux에서는 /etc/<app-name> 또는 /opt/<app-name>/config 있습니다.
      • 생성 된 파일 , 즉 실행 중에 응용 프로그램에 의해 작성되거나 수정 될 수있는 파일. 개발 중에 PROJECT_ROOT/var 에 보관하고 Linux 배포 중에 /var 에 보관하는 것을 선호합니다.
  • 어디서 C + +와 같은 비 파이썬 소스를 pyd / 바이너리 확장 모듈에 넣을까요?
    • PROJECT_ROOT/src/<egg_name>/native

문서는 일반적으로 PROJECT_ROOT/doc 또는 PROJECT_ROOT/src/<egg_name>/doc (달걀을 별개의 큰 프로젝트로 간주하는지 여부에 따라 다름). 일부 추가 구성은 PROJECT_ROOT/buildout.cfgPROJECT_ROOT/setup.cfg 와 같은 파일에 있습니다.





project-structure