저는 연구 프로젝트를 구성하는 더 좋은 방법을 찾고 있습니다. 다음과 같은 설정이 있습니다 :프로젝트 구조. Scientific Python projects
a
, b
, c
및 lib
라이브러리가 있습니다. 각 프로젝트는 다른 리서치 질문을 다루며 라이브러리는 프로젝트 전반에 걸쳐 사용되는 코드를 전달합니다. 따라서 모든 프로젝트는 lib
에 의존합니다. 프로젝트 c
은 프로젝트 a
과 b
에 따라 복잡해집니다. 프로젝트 c
에서 작업 할 때 a
, b
또는 lib
을 동시에 업데이트합니다. 각 프로젝트는 별도의 자식 저장소에 있습니다.
지금까지 위의 종속성을 git submodule
을 통해 포함 시켰으며 모든 소스 파일은 프로젝트의 루트 디렉토리에 있습니다. 이점은 내 프로젝트가 어떤 버전의 lib
인지 계속 추적한다는 것입니다. 또한 내 프로젝트 중 하나는 lib
의 구형 버전에 의존 할 수 있습니다. 모든 패키지를 사이트 패키지에 "설치"하지 않고 루트 디렉토리에서 모든 것을 실행합니다. 경로가 올바르게 설정되지 않은 경우 sys.path.insert
을 통해 재정의합니다.
그러나, 다음과 같은 점은 내가 레이아웃을 변경할 수 있도록 : 내가 편집하고 lib
의 버전 추적을 잃고 계속
- .
- 표준 프로젝트 설정으로 처리하기가 훨씬 쉬운 자동 테스트 도구 (tox, jenkins 등)를 사용하고 싶습니다.
sys.path.insert
디버그하기 어려운 미묘한 문제가 발생할 수 있습니다.- 나는 보통 모든 프로젝트가
lib
의 팁으로 작업하기를 원합니다.
따라서 나는 현재 표준 파이썬 디렉토리 구조에 부합되도록 모든 프로젝트 (especiall lib
)를 재 배열 오전 virtualenv
에서 작동 할 수 있도록 (하위 디렉토리에 저장된 소스, 루트는 setup.py
파일이 포함되어 있습니다). 그렇다면 내 모든 의존성을 requirements.txt
에 나열 할 수 있습니다. 먼저 pip install -e를 통해 lib
을 설치합니다. 그런 다음 pip freeze> requirements.txt를 실행하면 다음과 비슷한 줄이 포함됩니다.
-e git+<path_to_remote>@<sha>#egg=`lib`
그래서 다시 내가 특정에 대한 의존성이 내가 늙은 커밋 체크 아웃 할 수 있고 프로젝트가 실행되도록 보장
git submodule
와 마찬가지로 (SHA)를 커밋 발생했다.
virtualenv
에 모든 것을 설치할 수 있으며 경로 문제를 해결할 수 있습니다. 큰.
나는 새로운 문제에 직면 해있다. 한 가지 문제는 requirements.txt
의 sha 업데이트 방법입니다. 가장 쉬운 (그러나 아마도 가장 우아한) 솔루션은 커밋하기 전에 sha를 업데이트하는 pre-commit hook
을 작성하는 것입니다. 더 좋은 방법이 있습니까?
그리고 더 일반적으로 - 제 설정이 더 좋은 해결책이 있습니까?