파이썬으로 개발한 소프트웨어를 'PyInstaller'를 통해 실행가능한 바이너리(Executable Binary)로 만들 수 있다. 파이썬 코드를 실행하는데 필요한 다양한 의존성 패키지들을 한번에 묶어서 배포하고 싶은 경우와 보안관련 코드가 있을 때, 코드를 열어보기 힘들게 만들고 싶은 경우 PyInstaller의 사용을 고려해볼 수 있다. 자세한 내용과 매뉴얼 페이지는 PyInstaller 홈페이지에서 확인할 수 있다. (링크 : PyInstaller 홈페이지) 1. PyInstaller 설치와 사용법 PyInstaller를 pip를 통해서 쉽게 설치할 수 있다. pip install pyinstaller 설치가 완료되면 바이너리로 만들고 싶은 파이썬 스크립트를 pyinstaller의 인자로 넘겨주면..
클러스터를 모니터링하는 서버에서 간혹 ssh 접속이 안되는 문제가 발생할 때가 있다. 모니터링 서버는 주기적으로 클러스터 서버에 접속해서 돌고 있어야하는 프로세스가 잘 돌고 있는지, 커널 로그에 에러 메시지가 남아있는지를 확인하는 동작을 하는데, 간혹 ssh 접속이 실패하면서 서버에 문제가 있다고 리포팅을 하고 있었다. 특이한 점은 특정 호스트만 접속오류를 보이는게 아니라 랜덤하게 ssh connection timed out 메시지를 보이는 호스트 주소가 바뀌는 것이었다. 에러 리포팅 이후 문제를 확인하기 위해 직접 문제의 서버로 ssh 접속을 하면 또 문제없이 접속이 잘 되었다. 귀신을 잡는 느낌으로 문제의 원인을 분석해봤다. 1. nf_conntrack: table full dropping packe..
파이썬을 이용해서 알고리즘 문제를 풀다보면 언어 자체에서 지원하는 내장 메소드들을 사용하는 경우가 대부분이다. 이 때, 각 메소드들의 시간 복잡도를 정확하게 알고 사용해야 제대로된 알고리즘을 작성할 수 있다. 따라서 파이썬의 기본 타입들이 제공하는 메소드들과 그것들의 시간 복잡도를 정리하는 시간이 필요하다고 생각했다. 우선 변수 할당(바인딩, 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..
lsof는 list open files의 약자로 시스템에서 열려있는 파일에 대한 정보를 출력해주는 명령어다. (대략 '엘에스오브'라고 발음하는 것 같다) 리눅스와 유닉스는 일반 파일과 디렉토리, 소켓, 파이프, 블록 디바이스, 캐릭터 디바이스에 대한 관리를 파일 시스템을 통해서 할 수 있다. 따라서 특정 프로세스가 열고 있는 파일 디스크립터(fd)를 조회해보는 행위는 시스템을 모니터링하는데 굉장한 도움이 된다. 유닉스 계열의 운영체제에서는 프로세스가 열고 있는 파일을 지웠을 때, 파일 시스템에서 ls로 보이지는 않지만 reference count가 0이 아니기 때문에 실제로 지워지지 않고 남아있는 경우가 더러 있다. 이 때, 프로세스가 열고 있는 파일이 위치한 디스크를 정상적으로 언마운트할 수 없기 때문..
C언어 혹은 자바에서는 정수 자료형(int)의 오버플로우(Overflow) 문제를 생각해야 한다. 충분히 큰 값의 정수형 데이터를 다룰 때에는 long 타입을 사용해야한다는 점은 C언어와 자바를 이용해 프로그래밍하는 개발자에게는 상식과도 같다. 하지만 파이썬에서는 약간 다를 수 있다. 우선 정수형 데이터의 한계값과 타입을 검사해볼 수 있는 코드를 준비하자. import sys print sys.maxint type(sys.maxint) type(sys.maxint + 1) 이 코드를 파이썬2.x 인터프리터에서 실행해보면 다음 결과를 얻게 된다. 9223372036854775807 파이썬2에는 maxint라는 값이 존재한다. 정수형 변수가 표현할 수 있는 최대값이 지정되어 있으며 이 값보다 큰 값은 lon..
개발자뿐만 아니라 책상에 앉아서 장시간 일하는 사무직들에게 구부정한 자세, 거북목, 허리 통증은 흔한 일이다. 하지만 이런 잘못된 자세들을 그대로 두다보면 디스크가 오거나 체형이 변형되는 결과를 초래한다. 일하다가 한시간에 한번 정도, 화장실에 오가면서 스트레칭을 해주면 어느정도 통증완화는 될 것 같다. 커뮤니티에서 공유된 자료인데 원출처를 못찾겠다. (아시는분이 있면 댓글로 달아주세요..) 의자에 앉아서 잠깐씩 할 수 있는 스트레칭도 있다. 브릿지 자세 같은건 집에서 자기전이나 아침에 일어나서 잠깐씩하면 좋을 것 같다. 추가로 세계적인 척추 전문가인 캐나다 워털루 대학의 Stuart Mcgill 교수가 제안하는 척추운동 방법도 따라해보면 좋을 것 같다. (관련 유튜브 채널 - https://www.yo..
파이썬의 장점 중 하나는 다양한 패키지들의 지원이다. 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)) # ..
- Total
- Today
- Yesterday
- GitHub
- Jekyll
- nf_conntrack
- 지킬
- java
- 청양고추
- 베란다 텃밭
- 텃밭
- 도커
- 화분 버리기
- 베란타 텃밭
- MacOS
- 하둡
- hadoop
- 자바
- 파이참
- linux
- InterlliJ
- pycharm
- 리눅스
- 파이썬
- 화분
- 상추 재배기
- monitoring
- 깃허브
- Python
- docker
- 상추
- 고추
- okhttp
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |