이것저것 프로그래밍 정리(Macbook)

Jupyter Notebook - python 경로, pip module 인식 못함 본문

Mac

Jupyter Notebook - python 경로, pip module 인식 못함

parkaparka 2020. 10. 12. 14:07
반응형

Jupyter Notebook을 맨처음에 사용하다 보면 python의 경로 혹은 다른 문제 때문에 아래 사진처럼 분면 pip를 통해서 install 했음에도 python shell에서는 import 할수 있음에도 불구하고 설치한 모듈(ex) pandas, tensorflow)들을 Jupyter에서는 import 하지 못하고 No module named 'module' 이라는 ModuleNotFoundError이 발생할 때가 있다.

 

저는 python3, jupyter는 homebrew를 통해서 설치했고, numpy, pandas 등 다른 모듈들은 pip를 통해 설치한 상태입니다.

 

python shell에서는 import 되지만 jupyter에서는 import 되지 않는 numpy
import numpy가 문제 없이 import 되는 numpy

이 문제를 해결해 보도록 하자.


먼저 python shell과 Jupyter notebook에서 각각 어떤 파이썬을 사용하고 있는지 아래 명령어를 통해서 확인해보도록 하자.

import sys
print(sys.executable)

Jupyterlab 안에서 자체적으로의 python 3.8을 사용하고 있는 jupyter
Brew를 통해 설치한 python3.8을 사용중인 python shell

pip를 통해서 모듈을 설치하면 /usr/local/lib/python3.8/site-packages 에 모듈들이 설치 되는 것을 확인 할 수 있다. 

하지만 python shell과 jupyter notebook이 서로 다른 python3의 경로를 사용하기 때문에 /usr/local/lib/python3.8/site-packages 에 모듈이 설치 되어 있어도 jupyter notebook에서는 사용을 할 수 없는 것 같다. 

이번에는 아래 명령어를 통해 python shell 과 jupyter notebook에 등록 되어있는 환경변수를 확인해보자.

import sys
print(sys.path)

/usr/local/lib/python3.8/site-pachages가 python shell의 환경변수로 있는 것 확인 가능

이제 jupyter 자체에서 환경변수를 추가해주던가 아니면 jupyter에서 사용하는 파이썬을 brew를 통해 설치한 python으로 변경해주도록 하자.


방법 1.  jupyter 환경변수에 local 환경의 python3의 pip 경로 추가해주기

먼저 python은 그대로 두고 jupyter의 환경변수에 /usr/local/python3.8/site-packages 를 추가해서 pip를 통해 설치한 모듈들을 사용 할 수 있게 해주도록 하자.

아래 명령어를 통해서 환경변수를 추가해주도록 하자

import sys
sys.path.append("PATH")

brew를 통해 python3를 설치하고 pip를 통해 모듈들을 설치했으면 /usr/local/python3.8/site-packages 에 pip module들이 설치 되어 있을 것이다. 위 경로를 환경변수로 추가해주자.

import sys
sys.path.append('/usr/local/python3.8/site-packages')

이후 환경변수가 제대로 추가 되었는지 jupyter에서 sys.path 명령어를 통해 확인해 보도록 하자.

마지막에 보면 우리가 원하는 변수가 등록되어있는 것을 확인 할수 있다.

이제 실제로 import를 해 보도록 하자.

sys.path.append() 를 통해서 경로를 추가해 준 이후 import numpy 가 제대로 작동하는 것을 확인 할 수 있다.

하지만 위 방법은 python shell 과 jupyter가 각각 다른 python을 사용하고 있는 것이고 jupyter가 python shell의 pip를 끌어와서 쓰는 개념이라 볼수 있다.

또한 매번 sys.path.append() 를 해줘야하는 불편함 또한 있다.

 

이번에는 jupyter에서 사용하는 python을 local에서 쓰는 brew를 통해 install한 python3로 변경해 주는 방법을 알아 보도록 하자.


방법 2. jupyter에서 사용하고 있는 python3를 local에서 사용하고 있는 python3로 변경하기

터미널에서 아래 명령어를 통해서 현재 jupyter에서 어떤 파이썬을 사용할수 있는지 확인해보자.

jupyter kernelspec list

현재 brew를 통해 설치된 python3가 아닌 jupyterlab 안의 python을 사용중인 것을 확인 할 수 있다.

python3 kernel을 아래 명령어를 통해서 brew를 통해 설치한 python3로 재설치 해주도록 하자.

python3 -m ipykernel install --user

이후 jupyter kernelspec list 명령어를 통해서 사용 중인 python을 다시 한번 확인해보도록 하자.

위와는 다른 python3 경로로 변경되어 있는 것을 확인 할 수 있다.

 

이번에는 python shell과 jupyter notebook에서 sys.path 와 sys.execatable을 통해 한번 비교해보도록 하자.

먼저 sys.executable을 비교해 보도록 하자.

python3를 변경해줬기에 조금의 차이가 있지만 필요한 것들은 모두 같은 것을 확인 할 수 있다.

이번에는 sys.execuatble 명령어를 비교해보자.

sys.executable의 결과가 둘이 같은 것을 확인 할 수 있다.

위와 같이 python3를 변경한 이후 이제 실제로 모듈을 import 한 이후 제대로 작동하는지 확인해 보도록 하자.

위와 마찬가지로 numpy를 import해서 간단한 numpy array를 만들어보자.

방법 1과 마찬가지로 잘 작동하는 것을 확인 할 수 있다.

 

pip를 통해 module을 설치했음에도 불구하고 ModuleNotFoundError가 발생할때 방법1과 방법2 모두 해결 가능 하지만, 방법1은 임시 방편의 느낌이기에 방법2를 추천한다.

반응형
Comments