python을 이용해서 Linux 상에서 구동되는 GUI 프로그램을 개발할 일이 있어서 QT, Tkinter, kivy들을 테스트 하게되었다.

PyCharm을 이용해서 kivy 관련 코드들이 정상적으로 잘 실행이 되었다.

근데 terminal 창에서 kivy관련 코드를 실행하면(python test.py) 


ImportError: No module named 'kivy'


와 같은 에러를 계속 뿜어 낸다.

분명히 kiviy 공식 사이트가 지정해 주는대로 kivy를 정상적으로 잘 설치했고 따라서 PyCharm에서 잘 실행이 되었다.

그런데 유독 터미널 창에서만 실행이 되지를 않았다.

결국 문제는 path상에서 인식으로 하지 못한 문제였다. 원인은 anaconda를 설치했다가 삭제를 했는데 path상에는 여전히 그 놈이 살아있어서 path를 읽어가는 중에 문제를 일으킨것 같다.


root@joe-VirtualBox:/usr/lib/python2.7/dist-packages/kivy/uix# echo $PATH

/root/anaconda2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games


위와 같이 이미 삭제된 anaconda가 살이있어서의 문제였다.

/root/.bashrc에 있는 


export PATH="/root/anaconda2/bin:$PATH"


이 놈을 주석으로 묶어 버렸더니 터니널 창에서도 정상적으로 kivy가 잘 동작했다.

리눅스는 아무튼 복잡한 동물이라서... 쩝




Python의 list를 다룰 때 특히 list의 특정 항목을 다른 항목으로 치환하고자 할 때 사용하는 slice에서 자칫 잘못하면

원래의 list 항목을 날려 먹거나 원치 않는 value가 끼워넣어지는 문제가 발생한다.

그래서 list의 length가 원치 않게 변해 버리는 문제가 발생한다.

아래 코드가 전형적으로 이런 문제를 유발하는 예제이다.


#-*- coding: utf-8 -*-

a = []

b = [101, 102, 103, 104, 105]

for i in range(10):

   a.insert(i, i)


print("원본", a)

print('길이', len(a))


#아래 코드는 index 2~4까지를 바꾼다. 총3개를 바꾼다.

#그런데 list b에 있는 값은 5개이다. 따라서 b의 앞 3개는

#치환이 되지만 나머지 2개(104, 105)는 끼워넣기가 되어 버린다.

#따라서 list a가 원래 10개였는데 아래 코드 실행 후 len()은 12개가 된다

#a[2:5] = b[0:] 

#print(a)

#print("길이", len(a)) #12가 나온다


#아래 코드는 index 1~7까지 총 7개를 바꾸는데 바꿀 내용인 

#list b에는 값이 5개 뿐이다(101 ~ 105). 이럴 경우 발생하는 현상은

#list a의 index 1~5까지는 101~105로 각각 치환이 되고 

#list a에서 나머지 index 6~7에 해당하는 값은 사라져 버린다.

#그래서 아래 코드 실행후 list a의 len()은 8이 되어져 버린다.

#a[1:8] = b[0:] #이 코드를 실행하고자 하면 위 a[2:5] = b[0:]를 주석 처리 할 것

#print(a)

#print("길이", len(a)) #8이 나온다.


#이러한 문제를 해결하기 위해서는 다음과 같이 처리해 주어야 안전하다.

a[1:len(b)+1] = b[0:]

print(a)

print("길이", len(a))




Python은 좀 특이한 언어이다. 들여쓰기가 그렇게 의미 있는 행동이다.

또 공백이 있고 없고가 큰 차이를 만들어내는 경우도 있다.

대표적으로 Python 코드는 기본적으로 ASCII 문자로 처리해서 해석을 한다.

따라서 소스 코드 상에서 한글을 사용하면 컴파일 단계에서 에러 발산한다.

심지어는 #로 시작하는 주석에서 한글을 사용해도 컴파일 에러 발생한다.

에러 메시지는 다음과 같은 걸 뿜는다.


SyntaxError: Non-ASCII character '\xec' in file test.py on line 16, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details



따라서 파이썬에서 한글을 사용할려면 다음의 코드를 소스 맨 첫줄에 삽입해 주어야 한다.


#-*- coding: utf-8 -*-


그런데 다음과 같이 하면 여전히 한글을 사용할수 없는 상황이 변하지 않는다.


#-*- coding : utf-8 -*-


coding과 콜론(:) 사이에 있는 공백 때문이다. 


참고로 이 글은 Python 버전 2.7에서 실행했을 때의 상황이다.

Python 버전 3에서는 이상의 문제 발생하지 않는다.




+ Recent posts