인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

류재안님의 프로필 이미지

작성한 질문수

풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]

도커 활용하기 (주피터 노트북 서버 만들어보기)

주피터 노트북 서버 만들어보기_pymysql 설치관련

작성

·

80

0

안녕하세요.

aws 의 용량부족이라 추가하고 mount 했고요.

순서대로 주피터노트북 연결까지는 성공을 했습니다.

그런데 !pip install pymysql 이 실행이 안되서, 도커연결 cmd 창에서 실행하니, pip가 없다고 나와서, sudo apt install python3-pip 로 인스톨을 하니 리부팅을 하라고 해서 리부팅까지 하고,

연결이 해제되고 docker ps 하니 실행되는게 없어서 다시 실행하고, 토큰 확인해서 다시 주피터 노트북연결해서 들어가고 나서 다시 !pip install pymysql을 실행하니까 안되네요.

cmd 창에서 수행하니까, 에러가 나는데요,

image.png

확인해 보니 시스템이 관리하는 환경에서 직접적으로 패키지를 설치하려고 할 때 발생하는 거라, 이런 경우, Python 패키지를 설치하는 방법으로 가상 환경을 사용하거나 pipx를 사용하라고 하는데요.

혹시 강의 중간에 제가 놓친 부분이 있는 걸까요?

가상환경으로 구축을 따로 해야 하는건지..??

답변 1

0

잔재미코딩 DaveLee님의 프로필 이미지

안녕하세요. 우선 불편을 드려 죄송합니다.

확인해본 결과, 우분투(또는 데비안 계열) 환경에서 최근 파이썬 패키지 관리를 “시스템 파이썬”과 “사용자/가상환경 파이썬”으로 엄격히 구분하면서 나타나는 증상으로 보입니다. 즉, 시스템(루트) 파이썬 환경은 apt로 설치한 파이썬 패키지만 관리하도록 하고, pip를 통한 임의 설치는 원칙적으로 막아둔 상황입니다.

급히 관련 자료 업데이트 다음과 같이 하였고, 이후 급한일들이 정리되면, 영상으로도 업데이트하겠습니다.

가장 간단한 방법은 공유드린 이북 자료인 04_docker_link.pdf 파일에 다음과 같이 업데이트하였는데요. 도커 생성시 /bin/bash -c "pip install pymysql && start-notebook.py" 를 뒤에 붙여주시면 좋을 것 같습니다.

# 제공한 mysql_in_docker.ipynb 파일이 있는 디렉토리에서 실행
# 2025.02 업데이트
# 다음 도커 명령에 /bin/bash -c "pip install pymysql && start-notebook.py" 추가
# 사유
# 최근 우분투 시스템 환경에서는 시스템 파이썬에 대해 pip 명령어를 직접 실행하는 것이 제한되었습니다.
# 따라서, 주피터 노트북상에서 pip 명령이 실행되지 않습니다.
# 이를 우회하기 위해, 도커 컨테이너 내부에서 pymysql 패키지를 강제로 설치한 후 주피터 노트북을 실행하도록 명령어를 수정하였습니다.
#
# 추가된 /bin/bash -c "pip install pymysql && start-notebook.py" 에 대한 이해
#
#   1. /bin/bash -c "..." 
#      - 도커 컨테이너 내부에서 Bash 쉘을 실행하여, 큰따옴표 안에 있는 전체 명령어 문자열을 한 번에 처리합니다.
#
#   2. pip install pymysql
#      - pip를 사용하여 pymysql 패키지를 설치합니다.
#      - 이 명령은 우분투의 시스템 환경에서 pip 사용이 제한되는 문제를 해결하기 위해 컨테이너 내부에서 강제로 실행됩니다.
#      - 설치 성공 시 "Successfully installed pymysql-1.1.1" 등의 메시지가 출력되며, pymysql 라이브러리가 컨테이너에 추가됩니다.
#
#   3. && 
#      - 앞의 pip 설치 명령이 성공적으로 완료되면, 그 다음 명령인 start-notebook.py를 실행하도록 합니다.
#      - 만약 pip 설치가 실패할 경우, 이후 명령은 실행되지 않아 주피터 노트북이 실행되지 않습니다.
#
#   4. start-notebook.py
#      - pip 설치 후, 주피터 노트북(또는 주피터 랩)을 시작하는 스크립트를 실행합니다.
#      - 이 명령은 컨테이너 내부에서 주피터 서버를 구동시켜 웹브라우저로 접속할 수 있도록 합니다.
#
# 전체적으로, 이 명령은 도커 컨테이너가 시작될 때 자동으로 pymysql 패키지를 설치하고, 이어서 주피터 노트북 환경을 띄워주는 역할을 합니다.
docker run --rm -d -p 8888:8888 -v /home/ubuntu/2021_LEARN:/home/jovyan/work jupyter/datascience-notebook /bin/bash -c "pip install pymysql && start-notebook.py"

결과 (로그 확인)

ubuntu@ip-172-31-23-174:~$ docker logs 1bb9afe30a08 Collecting pymysql Downloading PyMySQL-1.1.1-py3-none-any.whl.metadata (4.4 kB) Downloading PyMySQL-1.1.1-py3-none-any.whl (44 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 45.0/45.0 kB 2.9 MB/s eta 0:00:00 Installing collected packages: pymysql Successfully installed pymysql-1.1.1 Entered start.sh with args: jupyter lab Running hooks in: /usr/local/bin/start-notebook.d as uid: 1000 gid: 100

 

이외에 참고로 다음과 같은 다양한 방안도 있어서 이 부분도 참고만 해보시면 좋을 것 같습니다.

 

해결 방법

  1. (권장) 가상환경(venv) 구성 후 pip install

    • 도커 컨테이너 내부에서 다음과 같이 진행:

      # venv 모듈 설치(혹시 안 깔려 있다면)
      sudo apt-get update
      sudo apt-get install python3-venv
      ​
      # 원하는 경로에 가상환경 생성
      python3 -m venv myenv
      ​
      # 가상환경 활성화
      source myenv/bin/activate
      ​
      # 이후 가상환경에서 pip 설치
      pip install pymysql
    • 그리고 Jupyter Notebook을 실행할 때도 이 가상환경에서 실행하도록 설정해야 합니다.

    • 혹은 이미 실행 중인 Jupyter라면, 커널을 가상환경 파이썬으로 연결해주어야 합니다.

  2. pipx를 이용한 설치

    • pipx도 내부적으로 가상환경을 생성해주는 방식이므로, “시스템 파이썬”을 건드리지 않고 패키지를 사용할 수 있습니다.

    • 예:

      sudo apt-get update
      sudo apt-get install pipx
      ​
      pipx install pymysql
    • 다만, 보통 파이썬 라이브러리를 개발용으로 설치할 때는 가상환경(venv)을 더 많이 사용하므로, 특별히 pipx를 선호하지 않는다면 1) 방법을 쓰는 경우가 많습니다.

  3. 도커 이미지를 직접 빌드하여 사용

    • 만약 Dockerfile이 있다면, Dockerfile 내에서 pip install을 미리 수행해두면 컨테이너가 올라올 때마다 이미 필요한 패키지가 설치된 상태가 됩니다. 예를 들어:

      FROM python:3.9-slim  # 또는 다른 base 이미지
      RUN pip install pymysql
      # 이후 jupyter, 기타 설정...
    • 이렇게 하면 컨테이너가 뜨는 시점에는 이미 pymysql이 설치되어 있기 때문에 따로 설치할 필요가 없어집니다.

  4. apt를 통한 시스템 패키지 설치

    • 만약 배포판(ubuntu/debian) 리포지토리에 python3-pymysql 패키지가 존재한다면, 아래처럼 설치할 수도 있습니다.

      sudo apt-get update
      sudo apt-get install python3-pymysql
    • 하지만 리포지토리에 있는 버전이 오래되어 있거나 원하는 버전이 아닐 수도 있기 때문에, 보통은 1) 가상환경을 만들어서 최신 버전의 라이브러리를 pip로 설치하는 방법이 더 유연합니다.

감사합니다.

잔재미코딩 드림

류재안님의 프로필 이미지
류재안
질문자

안녕하세요. 빠른 답변 감사합니다.

04_docker_link.pdf 의 수정부분 확인하였습니다.

실행시 import pymysql 및 db 연결도 잘되는데요.

 

link 부분이 잘 안되네요.

pdf 교재대로 해보기도 하고 이것저것 해보는데... 안되는데.. 혹시 교재 추가 수정이 필요한 부분일까요?