본문 바로가기
데이터 이것저것

GraphViz - 파이썬 가상환경에 설치하기

by Bellot 2025. 3. 26.

 

티스토리 랜덤광고 때문에 앞부분 스페이스 들어갑니다.

아래부터 본문 시작

 

파이썬으로 데이터 분석 공부중. 책이 완전한 수정은 좀 덜 되었는지, 코드가 아주 간혹 틀린 곳이 있다. 다행히 인공지능에 돌려서 알아내고 있다. 이번엔 틀린 건 아니지만, 빠져 있는 부분에서 걸리고 말았다. 바로 GraphViz.

 

ADP에서 GraphViz까지는 안나올 거 같긴 하지만.  그래도 책에 있으니 넘 궁금하단 말이지.


1. 에러코드

import numpy as np

# feature_columns = list(credit.columns.difference(['credit.rating']))
feature_names = feature_columns
target_names = np.array(['0', '1'])

import pydot
import pydotplus
import graphviz
from sklearn.tree import export_graphviz

dt_dot_data = export_graphviz(clf, feature_names = feature_names,
                             class_names = target_names,
                             filled = True, rounded = True,
                             special_characters = True)

dt_graph = pydotplus.graph_from_dot_data(dt_dot_data)

from IPython.display import Image
Image(dt_graph.create_png())

 

우선 코드를 실행했더니 pydotplus 패키지가 없다. pydotplus 부터 설치.

!pip install pydotplus==2.0.2

ADP 시험환경은 sklearn 버전이 낮은 편이라 걱정했는데, GPT 물어보니 pydotplus와는 충돌이 없을 것이라 해서 최신 버전 설치.


그런데 또 에러 난다.

InvocationException                       Traceback (most recent call last)
<ipython-input-16-cd6b0574fd78> in <module>
     18 
     19 from IPython.display import Image
---> 20 Image(dt_graph.create_png())

d:\adp\adp_test\lib\site-packages\pydotplus\graphviz.py in <lambda>(f, prog)
   1795             self.__setattr__(
   1796                 'create_' + frmt,
-> 1797                 lambda f=frmt, prog=self.prog: self.create(format=f, prog=prog)
   1798             )
   1799             f = self.__dict__['create_' + frmt]

d:\adp\adp_test\lib\site-packages\pydotplus\graphviz.py in create(self, prog, format)
   1958             if self.progs is None:
   1959                 raise InvocationException(
-> 1960                     'GraphViz\'s executables not found')
   1961 
   1962         if prog not in self.progs:

InvocationException: GraphViz's executables not found <- 여기!

 

에러가 나면 주로 맨 마지막 줄과, 초반 부분을 보면 간단하다. 

초반 부분부터 보자면, Image(dt_graph.create_png()) 저 줄에서 에러 발생 (그 앞까지는 돌아갔다는 얘기)

 

맨 마지막 줄에,  InvocationException : Invocation(호출, 실행) Exception(예외, 오류) 

-> 뭔가 호출하려다가 에러가 발생했다. 

 

세부내용은? GraphViz's executables not found

import graphviz 했는데 왜 실행할 수 있는게 없다 그러지..? GPT 물어보니 GraphViz는 아예 다운로드를 해야 한다고.


2. GraphViz 다운로드

그럼 하자.

https://graphviz.org/download/

 

Download

Source Code Source code packages for the latest stable and development versions of Graphviz are available, along with instructions for anonymous access to the sources using Git. Executable Packages Packages marked with an asterisk(*) are provided by outsid

graphviz.org

나는 12.2.0 버전으로, 64-bit ZIP archive 다운로드. (마지막이 0으로 끝나는 게 안정적이라고 어디서 주워들은 거 같은데... 그래서 이걸로 설치. 현재 최신 버전은 12.2.1)

 

권장 설치 방식은 C 드라이브 Program Files 에 전역 설치해서, 가상환경에는 실행파일(bin) 경로를 등록하는 것.

하지만 난 전역 설치 말고, 가상환경 안에 설치하고 싶어

 

GPT에 '난 가상환경에만 설치하고 싶어' 라고 했더니 → EXE파일 보다는 ZIP 파일 다운로드 해서, 가상환경 폴더에서 압축 풀고 환경 변수 등록하라고 하더라. 어디에 설치하든, 내가 쓰고 있는 가상환경에서 Graphviz의 실행 파일(dot.exe)을 찾을 수 있기만 하면 되기 때문!


3. 천천히 환경을 만들어봅시다

나는 D드라이브에 시험대비용 파이썬 가상환경을 만들어서, 

D:\ADP\ADP_Test  ← 이 경로에 위 사진과 같이 폴더 여러 개가 들어있다.


여기다가 다운받은 graphviz zip 파일을 압축 해제한 후, 폴더 이름을 Graphviz 로 간단하게 변경.

이제 요런 경로( D:\ADP\ADP_Test\Graphviz\bin )가 생겼다.

여기의 dot.exe 파일을 파이썬 가상환경이 찾을 수 있도록 해주면 된다.


ADP_Test의 Scripts 폴더로 들어가서, 

 

activate.bat 파일을 우클릭 → 메모장으로 편집


메모장에 영어로 뭐 이것저것 써있다.

스크롤 맨 밑으로 내려보면 이미 환경 변수가 하나 있다. (set PATH= ... %PATH%) 이 코드 아랫줄에 넣어주면 되겠네.

 

set PATH=D:\ADP\ADP_Test\Graphviz\bin;%PATH%

여기서 D:\ADP\ADP_Test\Graphviz\bin ← 이 부분만 본인 경로에 맞게 변경해주면 된다.

 

(PATH 는 실행파일을 찾는 경로를 지정해주는 중요한 환경변수이다. 아까 코드 에러 났을 때, 파이썬이 GraphViz executables 못 찾겠다고 말했다. 고로 실행파일을 찾을 수 있도록 경로를 지정해주는 것!)


그 다음 cmd 켜서, Scripts 파일이 있는 경로까지 들어가 activate.bat 실행.

아니면 activate.bat 있는 경로 몽땅 한 번에 쳐도 된다. 난 그냥 파일 타고 들어가는 거 좋아해서. 

 

환경변수를 설정하고 나면 이렇게 where dot 명령어를 알아듣게 된다.

(설치 전에는 ' 제공된 패턴에 해당되는 파일을 찾지 못했습니다. ' 라고 했음 - 설치되지 않았거나, 설치 되었어도 dot.exe 경로가 시스템에 등록되지 않은 상태에서 요런 말이 나옴)


가상환경 실행창을 완전히 껐다가 켜서, 아까 에러나던 코드를 다시 돌려보면

이렇게 잘 뜬다. (근데 넘 작아..)

 

그림에다 대고 우클릭 해서 새탭에서 이미지 열어서 보도록 하자. max_depth = 5 잘 나왔네. 필기 때 의사결정나무 최대 깊이를 루트 노드부터 세는 건지 분기 지점부터 세는건지 몰랐는데, 이제 그림을 보니 이해가 되는군. 분기 지점부터 세는거구나.

 

 

 

 

 

 

320x100
320x100