프로젝트 내에 Python 스크립트 패밀리를 작성 중입니다. 각 스크립트는과 같이 프로젝트의 서브 디렉토리 내에 : 스크립트의Python : 스크립트의 계열간에 공통 코드를 공유합니다.
projectroot
|
|- subproject1
| |
| |- script1.main.py
| `- script1.merger.py
|
|- subproject2
| |
| |- script2.main.py
| |- script2.matcher.py
| `- script2.merger.py
|
`- subproject3
|
|- script3.main.py
|- script3.converter.py
|- script3.matcher.py
`- script3.merger.py
이제 몇 몇 가지 코드를 공유 할 수 있습니다. 공유 코드는 프로젝트 자체의 일부로 간주되는 것이 가장 좋습니다. 개별적으로 컴파일하고 라이브러리를 만들거나, 사이트 전체에서 PYTHONPATH로 드롭하는 것은 아닙니다. 그 코드를 projectroot
디렉토리 나 projectroot
의 하위 디렉토리 (예 : common
)에 여러 위치에 배치 할 수 있습니다.
그러나, 지금까지의 생각하는 방법의 대부분은 빈 내 하위 프로젝트에서 __init__.py
파일을 패키지를 만들고 상대의 수입을 사용하여 (또는 중복 모든 하위 프로젝트에 sys.path
덤비는 포함한다. 더 나쁜, 그것은 패키지 구조를 구축하는 것 같아 스크립트의 가족은 거부 PEP-3122에서 다음과 같은 경고의 충돌하여 실행 주위 :
Attention! This PEP has been rejected. Guido views running scripts within a package as an anti-pattern.
패키지 내에서 스크립트 내가 같은에서 공통 코드를 유지하는 방식으로 일을 설정하는 방법 안티 patternish 인 경우 프로젝트 또는 모듈 및 패키지 기반 시스템을 여기에서 수용 할 수 있습니까? 어느 것이 가장 깨끗한 접근 방식입니까? (FWIW o 프로젝트 디렉토리에 shared.py
또는 common.py
과 같은 파일이 있습니다.
django는 모든 스크립트를 실행하기 위해'manage.py'라는 중앙 집중식 엔트리 포인트를 사용한다고 생각합니다. 이와 같이하면'subprojectX'를 패키지로 만들고,''manage.py' (엔트리 포인트) 스크립트 내부에서 집중적으로 가져 오기를 처리 할 수 있습니다. 패키지로서, 공유 기능이 살아갈 수있는'공통 '모듈을 쉽게 지원할 것이라고 나는 믿는다. – dm03514
나는 이것이 PEP-32122가 아니라 [PEP-3122] (https://www.python.org/dev/peps/pep-3122/)이어야한다고 생각한다. – user1071847