파이썬으로 개발한 소프트웨어를 'PyInstaller'를 통해 실행가능한 바이너리(Executable Binary)로 만들 수 있다. 파이썬 코드를 실행하는데 필요한 다양한 의존성 패키지들을 한번에 묶어서 배포하고 싶은 경우와 보안관련 코드가 있을 때, 코드를 열어보기 힘들게 만들고 싶은 경우 PyInstaller의 사용을 고려해볼 수 있다. 자세한 내용과 매뉴얼 페이지는 PyInstaller 홈페이지에서 확인할 수 있다. (링크 : PyInstaller 홈페이지) 1. PyInstaller 설치와 사용법 PyInstaller를 pip를 통해서 쉽게 설치할 수 있다. pip install pyinstaller 설치가 완료되면 바이너리로 만들고 싶은 파이썬 스크립트를 pyinstaller의 인자로 넘겨주면..
파이썬을 이용해서 알고리즘 문제를 풀다보면 언어 자체에서 지원하는 내장 메소드들을 사용하는 경우가 대부분이다. 이 때, 각 메소드들의 시간 복잡도를 정확하게 알고 사용해야 제대로된 알고리즘을 작성할 수 있다. 따라서 파이썬의 기본 타입들이 제공하는 메소드들과 그것들의 시간 복잡도를 정리하는 시간이 필요하다고 생각했다. 우선 변수 할당(바인딩, Binding)의 시간 복잡도는 O(1)이다. 즉, 'a = 1'이라는 할당문은 O(1)라는 시간복잡도를 갖는다. 여기에 산술연산, 값에 대한 비교 연산들 역시 모두 O(1)의 시간복잡도를 갖는다. list 타입의 메소드와 Big-O 리스트 타입의 내장 메소드들의 리스트와 그것들의 시간 복잡도에 대해서 알아보겠다. 소문자 L은 리스트 객체를 나타냈고 대문자 N은 리..
파이썬의 데이터 타입 중에 집합(set) 타입이 있다. 집합 타입의 메소드 중에 특정 엘리먼트를 삭제하는 메소드가 두 개 있는데, 'discard()'와 'remove()'가 그것들이다. 이 두 메소드 모두 엘리먼트를 삭제하는 동작이 있는데 정확하게 어떤 차이점이 있는 것일까? 우선 remove() 메소드를 테스트해보자. 다음 코드를 보자. s = set() s.add(10) s.remove(10) s.remove(10) remove() 메소드를 이용해서 '10'이라는 엘리먼트를 두번 제거했다. 첫번째 remove()는 예상대로 정상동작했지만 두 번째 remove()를 수행할 때 다음과 같은 에러가 발생한다. Traceback (most recent call last): File "test.py", li..
C언어 혹은 자바에서는 정수 자료형(int)의 오버플로우(Overflow) 문제를 생각해야 한다. 충분히 큰 값의 정수형 데이터를 다룰 때에는 long 타입을 사용해야한다는 점은 C언어와 자바를 이용해 프로그래밍하는 개발자에게는 상식과도 같다. 하지만 파이썬에서는 약간 다를 수 있다. 우선 정수형 데이터의 한계값과 타입을 검사해볼 수 있는 코드를 준비하자. import sys print sys.maxint type(sys.maxint) type(sys.maxint + 1) 이 코드를 파이썬2.x 인터프리터에서 실행해보면 다음 결과를 얻게 된다. 9223372036854775807 파이썬2에는 maxint라는 값이 존재한다. 정수형 변수가 표현할 수 있는 최대값이 지정되어 있으며 이 값보다 큰 값은 lon..
파이썬의 장점 중 하나는 다양한 패키지들의 지원이다. numpy, beautifulsoup 같은 다양한 라이브러리 패키지들이 제공되어 머신러닝 프로젝트들의 실제 계산 과정을 쉽게 이용할 수 있다. 이런 패키지들의 제공은 파이썬 프로젝트의 개발 생산성을 매우 올려준다. PIP란 무엇인가? 파이썬 개발 환경에 패키지들을 설치하기 위해서 pip 명령을 자주 사용한다. pip는 파이썬으로 작성된 패키지 라이브러리들을 관리해주는 시스템이다. 우분투의 apt-get, CentOS의 yum 명령을 생각해보면 비슷하다. pip는 파이썬 3.4 이후 버전에는 기본적으로 포함되어 있어 별도로 설치할 필요가 없다. pip 명령 - list 현재 내 컴퓨터에 설치된 파이썬 패키지 라이브러리 목록을 볼 수 있는 명령은 다음과 ..
파이썬으로 프로그래밍을 하다가 가끔씩 다음과 같은 에러를 만난다. UnboundLocalError: local variable 'len' referenced before assignment len이라는 이름의 변수를 할당하기전에 사용했다는 에러 메시지다. 이 에러를 발생시킨 코드는 다음과 같다. def func1(s): cs = set(s) for i in range(len(cs)): if False: len = 0 print(i) str = "ABCDDD" func1(str) 문제의 원인은 함수 내부에서 len이라는 변수에 값을 할당해서 사용했기 때문이다. C 언어나 Java의 경우 변수 이름으로 Reserved Word를 사용할 경우 변수 할당이 안되고 컴파일 에러가 발생한다. 하지만 파이썬은 Res..
알고리즘 문제를 풀다가 문자열을 이루고 있는 문자들을 배열로 다뤘다가 다시 문자열로 합치는 동작이 필요했다. Stack, Queue 같은 자료구조에 문자열을 이루고 있는 캐릭터들을 넣었다가 빼는 동작을 하고 다시 문자열로 만드는 동작이 필요했다. 파이썬의 String 클래스는 'join(list)' 메서드를 제공하고 있다. join 메서드를 이용하면 리스트를 구성하고 있는 각각의 캐릭터들을 하나의 문자열 형태로 변경해서 반환해준다. 예를들어보자. list = ['H', 'E', 'L', 'L', 'O', ' ', 'W', 'O', 'R', 'L', 'D'] print(list) print(''.join(list)) # List의 Element들을 공백없이 붙임 print(' '.join(list)) # ..
맥북이나 iMac에 파이썬 개발환경을 설치해보자. macOS에는 기본적으로 파이썬 2.x 버전이 설치되어 있다. 다음 명령을 실행해보면 기본적으로 설치되어 있는 파이썬 버전을 확인할 수 있다. python -v 확인해보니 현재 맥북에는 2.7.16 버전이 설치되어 있다. 그대로 파이썬 2 문법을 이용해서 파이썬 개발을 해도 좋겠지만 왠만하면 파이썬 3를 사용하는걸 권장하고 있으니 3.x 버전을 설치해보도록하자. 참고로 현재 맥북에서 파이썬을 실행하면 다음 경고 메시지를 볼 수 있다. WARNING: Python 2.7 is not recommended. This version is included in macOS for compatibility with legacy software. Future vers..
다이나믹 언어인 파이썬으로 프로그래밍하다보면 가끔씩 만나는 에러 메시지가 있다. 그 중에 하나가 TypeError: 'NoneType' object is not iterable 에러다. 반복문에 사용할 객체를 얻어오는 과정에서 iterable이 아닌 객체를 사용한 경우 이 에러를 만나게 된다. 이 에러를 재현할 수 있는 간단한 코드는 다음과 같다. def function1(param1): if param1 == 1: return "abc" elif param1 == 2: return "def" elif param1 == 3: return "ghi" value = 1 for char in function1(value): print(char) 이 코드를 실행하면 a b c 이런 실행 결과를 얻게 된다. va..
파이썬 개발 환경인 PyCharm을 이용해 파이썬 프로그램을 개발할 때 "Unresolved reference xxx" 에러를 만나게 되었다. 분명 문제는 없어보이는데 PyCharm 환경에서는 에러를 내고 있었다. Module1 이라는 파일에서 Module1 이라는 클래스를 불러들이는데 Module1을 찾을 수 없다는 의미의 에러 메시지였다. 분명 같은 경로에 Module1.py 라는 파일이 존재하는데 이상한 일이다. 해결 방법 이 경우 PyCharm의 소스 루트(Sources Root)를 지정해주면 된다. 프로젝트 디렉토리의 src 디렉토리를 우클릭하면 여러 메뉴가 뜬다. 그 중에 'Mark Directory as' 메뉴를 선택하고, 'Sources Root'로 선택한다. src 디렉토리가 소스 루트로..
- Total
- Today
- Yesterday
- nf_conntrack
- okhttp
- InterlliJ
- Jekyll
- GitHub
- 상추 재배기
- Python
- 깃허브
- 화분 버리기
- java
- 화분
- hadoop
- monitoring
- 파이참
- MacOS
- linux
- 도커
- 베란다 텃밭
- 텃밭
- 하둡
- 자바
- 청양고추
- docker
- 파이썬
- 리눅스
- 지킬
- pycharm
- 베란타 텃밭
- 고추
- 상추
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |