본문 바로가기
관리자

Programming-[Base]/git

[TIL] git submodule, python setup.py와 pip, Docker CMD Bash shell

728x90
반응형

 

1. git submodule

 

개념과 기본 형식

git submodule로 프로젝트 내에 다른 repository를 삽입하여 따로 형상 관리를 할 수 있다.

관리 요소가 늘긴하지만 병렬적 작업이 가능할 것 같다.

 

.gitmodules 파일을 만들고 아래 양식으로 내용을 써놓는다.

[submodule "<모듈 이름>"]
   path = <모듈 디렉터리 위치>
   url = git@github.com:<Repository 이름>/<git 위치>.git
    branch = <브랜치 이름> 또는 tag = <태그 버전>

 

그리고 터미널에서 아래 명령어를 입력하면, 서브모듈이 .gitmodules에서 정의한 branch나 tag를 따라서 update 된다.

git submodule update --remote

 

외부 모듈에서의 관리

외부 모듈에서 해당 모듈의 .py 파일들을 참조하여 사용할 수 있게된다. 외부 모듈 업데이트 시에 내부 모듈인 git submodule이 .gitmodules에 정의한 branch나 tag를 바라보도록 정의되므로 유의해야한다.

 

또한 업데이트 후 해당 모듈의 파일이 IDE(pycharm)상 git staging 목록에 있는지 꼭 확인해야한다. 만약 그렇지 않으면 새로고침 버튼을 누르거나 IDE를 재시작하여 아래 체크 표시처럼 반드시 staging 목록에 있는지 확인하고 commit을 해야 변경사항이 반영된다.

 

 

 

 

2. pip install

 

pip install은 파이썬에서 패키지를 설치할 수 있도록 해준다. 위 submodule을 설치했다면 아래 명령어를 통해서 submodule에 있는 패키지들을 외부 모듈에서 설치할 수 있다. 설치가 완료되면 External Libraries에서 submodule에 있는 패키지들이 있는 것을 확인할 수 있다.

 

아래 명령어를 통해 설치가 가능하다.

 

pip3 install <submodule의 path>

 

같은 방식으로 python 자체에서 setup.py를 이용해 서브모듈을 설치할 수도 있다. 서브 모듈 내부에 setup.py를 아래 양식으로 넣어놓으면 명령어 실행이 가능하다.

from setuptools import find_packages, setup

setup(
    name="<패키지 이름>",
    version="0.1.0",
    packages=find_packages(),
)

 

python3 install <setup.py 파일의 위치>

 

그럼 서브 모듈 내 패키지들을 찾아서 setuptools가 설치한다. 다만 python 명령어로 직접 설치하는 것보다는 pip 패키지 관리자로 설치하는 것이 더 잘 관리되고 안전하다고 한다.

 

참고로 python 3 버전부터 python3 명령어를 사용하는 것처럼 pip도 python3 버전 이상부터는 pip3 명령어로 실행한다.

 

 

 

3. Docker RUN

 

서브 모듈 설치를 도커의 Dockerfile에서 실행할 수도 있다.

 

RUN pip3 install --no-cache-dir <서브 모듈 위치>

 

--no-cache-dir 옵션은 캐시를 하지 않고 항상 새로 설치하라는 의미이다.

 

 

Bash shell 짜기

 

위 RUN 구문은 Docker Container내에 서브 모듈 파일들을 전부 COPY한 뒤에 RUN하는 방식이다. RUN 인스트럭션을 넣으면 불필요한 이미지 레이어가 추가될 수 있으므로 아래 처럼 .sh 확장자로 끝나는 shell 실행용 파일을 프로젝트에 넣어놓고, CMD 인스트럭션으로 도커 컨테이너내에서 실행하도록 할수도 있다.

 

Bash 파일: install-submodule.sh

#!/bin/bash
pip3 install --no-cache-dir /var/app/<submodule 이름>
COPY install_carta_util.sh /
CMD ["/bin/bash", "/install_carta_util.sh"]

 

물론 이 방식도 서브 모듈 파일 자체가 이미지에 포함되어야 있으므로 큰 이점이 있지는 않다. 그러나 이런 방식도 있다는 것을 알고 있으면 나중에 도움이 될 것 같다.

728x90
반응형