Windows 10 64bit 기준


python3.6에서 jupyter를 설치하다가 에러가 나서 쓰는글


-> python3를 설치할거면 3.6 말고 3.5로 설치하라


1. python3.5 설치

2. cmd 관리자 모드로 실행

3. pip install jupyter

4. jupyter notebook # run webserver


python interpreter를 쓰고싶으면 built-in 대신 ipython 또는 jupyter를 사용하자


WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/

필자는 python이 dynamic typing language라는 특징이 좋아보였으나

직접 사용해보니 함수의 파라미터 타입 때문에 자꾸 에러가 나고 고치기는 힘들어서

C, C++, Java를 사용해왔다


그런데 이번에 NAVER CAMPUS HACK DAY를 다녀온다음에 생각이 바뀌었다

프로젝트 내용은 python ctypes library를 사용하여 C library module을 call하는 client를 개발하는 것이었는데, 이 때 느낀 것이 python ctypes의 강력한 C Portability였기 때문이다


자세히 말해, python은 다른 언어들에 비해 C 라이브러리 함수 call이 쉽다

python은 C언어로 구현된 라이브러리를, 그대로, 간단하게 사용할 수 있다는 의미이다 (Java보다 훨씬)

그 예로 Caffe, Caffe2, Tensorflow 등 매우 많은 프레임워크/라이브러리에서 python binding을 제공해준다

정리하여 python의 C Library의 함수 call이 굉장히 쉽다는 점은 가장 큰 장점이자 python을 써야하는 이유라고까지 할수있다

이제 python의 특징을 다른 언어들과 비교해보자

필자가 자주 사용하는 언어들과 주관적으로 비교해보았다


C언어
pro: high performance
con: low productivity

Raspberry Pi나 아두이노같은 Embedded programming이 아니면 C언어는 낮은 생산성 때문에 쓰기 힘들다


C++

멀티-패러다임 언어

중간 성능, 중간 생산성(난이도)

멀티-패러다임 언어라서 가장 자유로운 언어라고 할수있다.

하지만 애매하다. 성능을 원한다면 C언어 / 생산성을 원한다면 Java가 낫다
그리고 자유로운만큼 에러 디버깅이 힘드므로 (예를들면 segmentation fault) 생산성은 중간
성능이 부족할 일은 웬만하면 없으므로 필자는 편리함을 보고 Java로 넘어갔다


Java
pro: high productivity, platform-independent
con: low performance, JNI
OOP 패러다임 언어

생산성이 높고, OS 플랫폼에 독립적이며, 비교적 성능은 낮지만 웬만하면 문제가 되지 않으며, 
성능이 필요하면 JNI를 통해 C언어와 연동하면 된다.

JNI를 사용하는 또다른 이유, C로 이미 구현한 함수를 Java에서 사용할수 있다는 것이지만 JNI 사용법이 까다롭기 때문에 그냥 Java로 porting해서 사용했다


결론적으로 python은 Java의 특징들을 모두 가지면서 C로 구현된 라이브러리를 훨씬 쉽게 호출할 수 있다!

이외에도 python은 여러가지 장점들이 있다
* 가장 큰 장점인 C portability (ctypes)
* 코드가 짧다는 점
* 가독성 좋은 문법
* 방대한 라이브러리 (beautifulsoup4, numpy 등)


python도 dynamic typing 등 불편한 점이 없진 않지만, 적응하면 오히려 편리할 것 같고
Caffe2를 공부해보니, 앞으로 python은 계속 쓰게될것 같아서 평소에 미리 익숙해져 있어야겠다




WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/env python
#echo_server.py
 
from socket import *
 
 
host=''
port=6666    
size=1024
 
ssock=socket(AF_INET,SOCK_STREAM)
ssock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
 
ssock.bind((host,port))
ssock.listen(1)
csock,addr=ssock.accept()
print addr
 
csock.send(csock.recv(size))
csock.close()
ssock.close()
 
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python
#echo_client.py
 
from socket import *
 
host='127.0.0.1'
port=6666
size=1024
 
sock=socket(AF_INET, SOCK_STREAM)
 
sock.connect((host,port))
sock.send('hello')
print sock.recv(size)
 
cs


echo_server.py


echo_client.py



WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/

python2.7에서 pip install 오류가 날 경우 : http://ssaemo.tistory.com/40


1. 

우선, https://bootstrap.pypa.io/get-pip.py 에서 get-pip.py 파일을 다운로드 받습니다.

필자는 c:\ssaemo\ 디렉토리에 다운로드 받았습니다.

python c:\ssaemo\get-pip.py

c:\ssaemo 디렉토리에 get-pip.py를 다운받았다고 가정

위 명령어로 pip 7.1.2를 설치합니다.

pip는 python package manager입니다. centos의 yum이나 debian계열의 apt-get같은 겁니다.



2. 

pip install virtualenv

virtualenv 패키지(모듈)를 설치합니다. 이게 어디에 쓰이는 물건인고? 뒤 부분을 보시면 이해됩니다.



3. 가상 환경 만들기

cd c:\ssaemo

python -m venv django_venv1

dir

cd django_venv1

설명 : 

python -m venv : venv(virtualenv) 파이썬 모듈을 실행합니다.

django_venv1 : 가상 환경의 이름을 'django_venv1'로 지정합니다.



4. 

scripts\activate                #가상환경 실행. Linux : " . /bin/activate "

pip install django==1.8         #django 1.8버전을 설치

pip list                        #installed package list 출력

Django가 설치된 것을 확인할 수 있습니다.



5.

가상 환경 밖에서 

pip list

엥? Django 패키지가 보이지 않습니다.

그리고 가상 환경에서는 안 보이던 패키지들(ex:virtualenv)도 보이네요.

이제 가상 환경이 무엇인지 이해가 되시나요.


가상 환경은, 말 그대로 가상 환경을 구성합니다.

외부의 영향을 받지 않는, 외부로부터 독립된 환경을 구성합니다.

더 구체적으로 말하면 위와 같이 가상 환경마다 패키지를 따로 구성할 수 있습니다.

다른 특징들도 있지만, 현재 체감되는 것은 이 뿐입니다. 

패키지를 따로 구성할 수 있을 때의 장점은

패키지 버전을 업그레이드할 때, 기존의 프로젝트들이 버전업에 대한

호환성을 고려할 필요가 없다는 겁니다.

VMware랑 비슷하다 생각하시면 됩니다.



WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/

pip : python install package. 즉, python package manager이다.


easy_install도 패키지 매니저지만, pip를 권장하는 듯?


> python2.7에서 pip를 설치할 떄 오류가 나는 이유

Windows에서 User Directory 이름이 '한글'일 때 python2.7에서 UnicodeEncodeError가 발생합니다.

즉, 경로 상에 한글이 포함되어 있을 경우 python2.7에서 에러가 발생합니다.

python3.5는 경로 상에 한글이 포함되어 있어도 상관없습니다. python3부터 문자열을 unicode로 처리하니까요.

필자는 python2.7에서 진행하기 위해 사용자 이름이 영문인 사용자 계정을 하나 더 만들고(해당 계정에 권한도 주었음)

해당 계정에서 진행하서 python2.7로도 pip를 잘 인스톨 할 수 있었습니다.

(get-pip.py 내부 코드가 멀티바이트(한글)도 처리할 수 있도록 수정하는 방법도 있습니다만.. 이게 더 쉽습니다)


요약 : pip 설치 시 python2.7 쓰려면 경로에 한글 없어야함. python3.5는 상관없음.


WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/

사용중인 블로그 스킨이 방명록을 지원하지 않습니다.

초대장을 받고싶으신 분들은 댓글 또는 블로그 설명의 메일로.