작성
·
512
0
안녕하세요! 강의 수강 중 질문입니다.
ipython shell 까지는 잘 작동하는데 jupyter notebook 부터 저런 오류가 발생합니다. 처음 jupyternotebook 열릴 때 첫 화면 경로가 askcompany가 아니고 제가 사용하던 폴더가 뜨던데 어떤점때문에 이런 오류가 발생하는걸까요?
답변 2
0
됩니다 ㅠㅠ 이런 사소한 실수를 해버렸네요 ㅠㅠ..정말 감사합니다
그런데 처음에 sys.path.insert 하기 전에는 왜 안되었던 건가요??
manage.py파일이 있는 폴더에서 똑같이 실행해도 Ipython은 잘 되었는데 jupyternotebook만 안 된 이유가 궁금하네요.
(스크린샷은 지우도록 하겠습니다!)
0
안녕하세요.
manage.py 가 있는 경로에서 터미널에서 jupyter notebook 명령으로 쥬피터 노트북을 실행하신 것이 아닌, 다른 방법으로 jupyter notebook을 실행시키신 듯 합니다.
그래서 askcompany 폴더가 있는 현 장고 프로젝트 경로가 임포트 경로에 없어서 발생하는 오류인듯 합니다.
쥬피터 노트북은 어떤 방법으로 실행하셨나요?
지금 장고 프로젝트는 어떤 경로에 있나요?
지금 쥬피터 노트북 파일에서 import sys; print(sys.path) 값이 어떻게 되시나요?
확인해보시고, 댓글 부탁드립니다.
화이팅입니다. :-)
쥬피터 노트북은 VisualStudio 명령프롬프트 터미널에서 아래와 같은 경로로 실행했습니다.
(askcompany) C:\Dev\askcompany>jupyter notebook
장고 프로젝트는 c:\Dev\askcompany\askcompany 경로에 있습니다.
print(sys.path)값은 다음과 같습니다.
['C:\\ds_work', 'C:\\ProgramData\\Anaconda3\\envs\\askcompany\\python37.zip', 'C:\\ProgramData\\Anaconda3\\envs\\askcompany\\DLLs', 'C:\\ProgramData\\Anaconda3\\envs\\askcompany\\lib', 'C:\\ProgramData\\Anaconda3\\envs\\askcompany', '', 'C:\\ProgramData\\Anaconda3\\envs\\askcompany\\lib\\site-packages', 'C:\\ProgramData\\Anaconda3\\envs\\askcompany\\lib\\site-packages\\win32', 'C:\\ProgramData\\Anaconda3\\envs\\askcompany\\lib\\site-packages\\win32\\lib', 'C:\\ProgramData\\Anaconda3\\envs\\askcompany\\lib\\site-packages\\Pythonwin', 'C:\\ProgramData\\Anaconda3\\envs\\askcompany\\lib\\site-packages\\IPython\\extensions', 'C:\\Users\\PC\\.ipython']
sys.path에 c:\Dev\askcompany 경로가 없다는 것이 뭔가 이상하네요. 흠.
manage.py 파일이 c:\Dev\askcompany\askcompany\manage.py 경로에 있나요?
그렇다면 c:\Dev\askcompany\askcompany 에서 jupyter notebook 명령을 내리시는 것이 맞습니다.
manage.py 파일이 c:\Dev\askcompany\manage.py 경로에 있다면
c:\Dev\askcompany 경로에서 jupyter notebok 명령을 내리시는 것이 맞구요.
그래도 안된다면, 수동으로 sys.path 에 manage.py 가 있는 폴더 경로를 추가해주는 방법도 있습니다. 쥬피터 노트북에서 커널 재시작하신 후에, 가장 처음으로 실행하신 후에 나머지 코드를 실행해보시겠어요?
import sys
sys.path.insert(0, "manage.py가 있는 폴더 경로")
print(sys.path)
살펴보시고, 댓글 부탁드립니다.
화이팅입니다. :-)
경로 구분자로서 역슬래시는 명령프롬프트나 윈도우 파워쉘에서 허용되구요. 리눅스/맥에서는 슬래시(/)가 경로구분자입니다.
파이썬을 비롯한 대부분의 프로그래밍 언어에서는 역슬래시는 Escape Sequence로서 특별한 역할을 합니다. "\n" 은 한 글자로서 개행문자를 나타내죠. "\t" 은 한 글자로서 탭(Tab)이구요.
아래 스크린샷을 보시면, "c:\Dev\askcompany" 문자에서 \a 가 독립된 글자가 아니라 하나의 글자로서 \x07로 표현되어있음을 확인하실 수 있습니다.
경로구분자인 역슬래시는 그 자체로 독립적인 문자로 처리되어야 합니다. 그러니 "C:\Dev\askcompany" 가 아니라 "C:\\Dev\\askcompany" 로 지정하는 것이 맞습니다.
혹은 Raw String으로서 앞에 r을 붙여서 (정규 표현식쓸때 많이 쓰죠)
r"c:\Dev\askcompany" 하시면, 역슬래시에 대해서 알아서 Escape 처리를 해줍니다.
혹은 역슬래시 대신에 슬래시(/)를 쓰셔도 파이썬에서는 잘 동작합니다.
"c:/Dev/askcompany"
확인해보시고, 댓글 부탁드립니다.
저도 이런 경우는 처음이라, 쓰시는 컴퓨터를 제가 정확히 체크해보지 않는 한, 정확한 이유는 잘 모르겠습니다.
python이나 jupyter나 실행된 현재 디렉토리 경로를 최우선 path로 잡거든요.
혹은 그러실 가능성은 낮지만
jupyter notebook 서버를 다른 명령으로 이미 띄워두셨고, (서버#1)
장고 프로젝트에서도 또 다른 jupyter notebook 서버를 띄우셨고 (서버#2)
그런데, 접속은 서버#1로 하셨다면 지금과 같은 상황이 발생하실 수도 있습니다.
jupyter notebook list 명령으로 현재 컴퓨터에서 구동중인 서버 목록을 확인하실 수 있습니다.
임포트 오류가 있을 때, 지금처럼 sys.path 리스트 값을 확인해보시는 습관을 들이시면 좋습니다.
지금은 파이썬이 낮은 버전이지만, 강의 완료 후에 파이썬과 jupyter를 최신버전으로 쓰시면 정상적으로 동작할런지도 잘 모르겠네요.
화이팅입니다. :-)