cd 가상환경을 설치할 경로

 

python -m venv 가상환경이름

 

source 가상환경이름/Scripts/activate

 

deactivate

 

설치된 패키지 리스트 txt 파일로 변환

pip freeze > requirements.txt

 

변환된 txt 파일로 패키지 설치하기
pip install -r 파일이름.txt

반응형

'programming > Python' 카테고리의 다른 글

파이썬 패턴  (0) 2024.06.12
파일, 디렉토리 관리  (0) 2024.06.12
DataFrame, Column name 변경  (0) 2020.09.06
DataFrame, indexing - loc, iloc  (0) 2020.09.05
visdom server port 변경  (0) 2020.03.15

 

자주 쓰는 패턴 모음

기능 패턴
숫자 ^[0-9]*$
영문자 ^[a-zA-Z]*$
한글 ^[가-힣]*$
영어 & 숫자 ^[a-zA-Z0-9]*$
E-Mail ^[a-zA-Z0-9]+@[a-zA-Z0-9]+$
휴대폰 ^01(?:0|1|[6-9]) - (?:\d{3}|\d{4}) - \d{4}$
일반전화 ^\d{2,3} - \d{3,4} - \d{4}$
IP 주소 ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3})
모든 기호 (공백, 개행 제외) \.|\,|\"|\'|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\=|\+|\\|\||\?|\~|\`

 

반응형

'programming > Python' 카테고리의 다른 글

venv 가상환경  (0) 2024.08.21
파일, 디렉토리 관리  (0) 2024.06.12
DataFrame, Column name 변경  (0) 2020.09.06
DataFrame, indexing - loc, iloc  (0) 2020.09.05
visdom server port 변경  (0) 2020.03.15

주요 함수

getcwd() 현재 작업 디렉터리를 반환 os.getcwd()
mkdir() 지정된 경로에 새로운 디렉터리(폴더)를 생성
e.g.) /test/dir_a/dir_b
os.mkdir(path)
makedirs() 지정된 경로 내에 있는 상위, 하위 디렉토리(폴더)를 모두 생성
exist_ok = True 옵션은 생성할 폴더가 이미 있을 때 exception을 방지함

e.g.) /test/dir_a/dir_b     # →  /test 아래 dir_a와 dir_b가 없다면 전부 생성
os.makedirs(path, exist_ok = True)
exists() 지정된 경로가 존재하는지 확인 (True/False 값 반환) os.path.exists(path)
isdir() 지정된 경로가 디렉터리인지 확인 (True/False 값 반환) os.path.isdir(path)
isfile() 지정된 경로가 파일인지 확인(True/False 값 반환) os.path.isfile(path)
abspath() 지정된 경로의 절대 경로를 반환 os.path.abspath(path)
join() 운영 체제에 맞게 경로를 연결하여 새 경로를 생성 os.path.join(path1, path2)
split() 경로를 디렉터리와 파일로 분리(튜플로 반환) os.path.split()

 

텍스트 파일 오픈

f = open("a.txt", 'r')
lines = f.readlines()
for line in lines:
    print(line)
f.close()

 


 
디렉토리/파일 관리

os.chdir(path) 작업 디렉토리(현재 위치) 변경
os.getcwd() 작업 디렉토리(현재 위치) 정보 확인
os.remove( filename or path ) 파일이나 디렉토리 삭제
os.mkdir( path ) 디렉토리 생성
os.makedirs( path ) 디렉토리 생성 , /root/user/home/local/temp ... 처럼 긴 경로도 한 번에 생성 가능
os.path.abspath(filename) 파일의 상대 경로를 절대 경로로 변경하는 함수
os.path.exists(filename) 파일 존재 여부 확인 함수 (주어진 경로, 이름의 파일이 있는지 조사)
os.curdir() 현재 디렉토리 정보 확인
os.pardir() 부모 디렉토리 정보 확인
os.sep() 디렉토리 분리 문자 확인. windows "\", linux "/" 반환
os.symlink(src, dst) 원본 파일(src)에 대한 심볼릭 링크(dst)를 생성
os.rename(src, dst) 원본 파일명(src)을 주어진 파일명(dst)으로 변경

 

 

파일 목록 관리

glob.glob(wildcard)  패턴을 이용하여 파일 목록 조회
os.listdir(path)  해당 디렉토리(path)의 전체 목록 조회
dircache.listdir(path)  os.listdir(path)와 동일. 단, path가 변경되지 않으면 이미 읽은 정보를 재활용
dircache.annotate(head, list)  일반 파일명과 디렉토리명 구분



 
파일명 관리

os.path.basename(filename) 파일명 추출
os.path.dirname(filename) 디렉토리 정보 추출
os.path.split(filename) 경로와 파일명 분리
os.path.splitdrive(filename) 드라이브명과 나머지 분리 (MS windows)
os.path.splitext(filename) 파일명과 확장자 분리

 

반응형

'programming > Python' 카테고리의 다른 글

venv 가상환경  (0) 2024.08.21
파이썬 패턴  (0) 2024.06.12
DataFrame, Column name 변경  (0) 2020.09.06
DataFrame, indexing - loc, iloc  (0) 2020.09.05
visdom server port 변경  (0) 2020.03.15

DataFrame에서 컬럼명을 수정하는 방법은 몇 개가 존재한다.

아래와 같은 DataFrame 샘플이 존재한다고 할 때

import pandas as pd
df = pd.DataFrame( {'c1':[1, 2, 3]
                   ,'c2':[3, 4, 5]
                   ,'c3':[6, 7, 8]})

	c1	c2	c3
0	1	3	6
1	2	4	7
2	3	5	8

 

□ 특정 컬럼명 수정

아래 세 가지 방법으로 컬럼명 수정이 가능하다.

df.rename( {'c1':'A1'}, axis='columns', inplace=True)
# 이때 inplace=False이면 원본 데이터(df) 값 자체는 변경하지 않는다. default는 False이다.

	A1	c2	c3
0	1	3	6
1	2	4	7
2	3	5	8


df.rename( columns={'c1':'B1'}, inplace=True)  

	B1	c2	c3
0	1	3	6
1	2	4	7
2	3	5	8


df.rename( columns={df.columns[0]:'C1'}, inplace=True)

	C1	c2	c3
0	1	3	6
1	2	4	7
2	3	5	8


df.columns.values[0] = 'D1'

	D1	c2	c3
0	1	3	6
1	2	4	7
2	3	5	8

- inplace option

DataFrame에서 inplace option은 원본 데이터(source) 자체를 변경하는가, 하지 않는가를 지정한다.

inplace=False인 경우에는 원본 데이터 자체는 변경하지 않고 형상만 변경한다. 이때 해당 형상은 return 값을 통해서 받을 수 있다.

 

temp = df.rename( {'c1', 'A1'}, axis='columns', inplace=False) 

 

의 경우 원본 데이터인 df의 첫 번째 컬럼명은 A1으로 변경되지 않는다.

반면 temp는 컬럼명이 A1으로 변경된 데이터를 가지게 된다. 

 

같은 원리로

df.rename( {'c1', 'A1'}, axis='columns', inplace=True) 은

df = df.rename( {'c1', 'A1'}, axis='columns', inplace=False)  과 동일한 결과를 가진다.

 

 

□ 컬럼명 전체 변경

아래 방법으로 컬럼명 전체 수정이 가능하다.

df.rename( {'c1':'A1', 'c2':'A2', 'c3':'A3'}, axis='columns', inplace=True)

	A1	A2	A3
0	1	3	6
1	2	4	7
2	3	5	8


df.rename( columns={'c1':'B1', 'c2':'B2', 'c3':'B3'}, inplace=True)

	B1	B2	B3
0	1	3	6
1	2	4	7
2	3	5	8


df.columns = ['C1', 'C2', 'C3']

	C1	C2	C3
0	1	3	6
1	2	4	7
2	3	5	8

 

반응형

'programming > Python' 카테고리의 다른 글

파이썬 패턴  (0) 2024.06.12
파일, 디렉토리 관리  (0) 2024.06.12
DataFrame, indexing - loc, iloc  (0) 2020.09.05
visdom server port 변경  (0) 2020.03.15
서식 지정, print format  (0) 2020.03.14

□ DataFrame.loc 사용법

구분

기본 사용법

다른 형태

row name

df.loc[ "row1" ]

 

row name list

df.loc[ "row1", "row2", "row3" ]

 

row name list slicing

df.loc[ "row1" : "row5" ]

df[ "row1" : "row5" ]

column name

df.loc[ :, "col1" ]

df[ "col1" ]

column name list

df.loc[ :, [ "col1", "col2", "col3" ] ]

df[ [ "col1", "col2", "col3" ] ]

column name list slicing

df.loc[ :, "col1" : "col5" ]

 

 

□ DataFrame.iloc 사용법

구분

기본 사용법

다른 형태

row

df.iloc[ 1 ]

 

row list

df.iloc[ [ 1, 2, 3 ] ]

 

row list slicing

df.iloc[ 1 : 5 ]

df[ 1 : 5 ]

column

df.iloc[ :, 1 ]

 

column list

df.iloc[ :, [ 1, 2, 3 ] ]

 

column list slicing

df.iloc[ :, 1 : 5 ]

 

 

반응형

'programming > Python' 카테고리의 다른 글

파일, 디렉토리 관리  (0) 2024.06.12
DataFrame, Column name 변경  (0) 2020.09.06
visdom server port 변경  (0) 2020.03.15
서식 지정, print format  (0) 2020.03.14
pytorch GPU check  (0) 2019.11.08

visdom은 facebook에서 데이터 시각화를 위해 제공하는 기능이다.

딥러닝을 위해 pytorch를 사용한다면 기본적으로 설치해 두는 것이 좋다.

 

□ visdom 설치

pip install visdom

 

□ visdom 실행

python -m visdom.server

 

visdom은 웹 상에서 호출이 가능하고 visdom server가 정상적으로 수행되면 기본적으로 제공하는 포트는 8097이다.

ex) http://127.0.0.1:8097

 

이때 포트 번호는 변경할 필요가 종종 있다. 한 예로 , docker 환경에서 사용할 경우에는 8097 포트를 미리 docker 외부 연결이 가능하도록 지정하지 않았다면 docker에서 지정해 놓은 포트로 변경해야 사용이 가능하다.

포트 변경을 위해서는 -port 옵션을 사용한다.

 

□ visdom port 변경

python -m visdom.server -port [port number]

 

만약 docker 지정 포트가 9002 라면 visdom server 실행 시 -port 옵션에 9002를 기재한다. 

ex) python -m visdom.server -port 9002

 

 

□ python에서 visdom 실행

python에서는 아래처럼 간단히 호출이 가능하며 default port로 8097을 사용하여 통신한다.

import visdom
vis = visdom.Visdom()

따라서 visdom port를 변경하고 그대로 호출하면 아래와 같은 오류가 발생한다.

□ python에서 변경된 port로 visdom 실행

import visdom
vis = visdom.Visdom(port='9002')

사용 예) 변경된 port가 9002일 경우, 아래와 같이 오류없이 잘 실행된다.

웹 상에서 확인하면 Hello 문구가 잘 출력된 것을 볼 수 있다.

 

 

반응형

파이썬 print문에서 format 메소드 사용 시 서식 지정방법은 아래와 같다.

 

□ 형식

① 소수점을 포함한 전체 길이 지정

② 소수점 이하 길이 지정, 반올림 처리

③ 서식지정자

 

□ 출력 방식

소수점을 포함하여 전체 길이를 출력한다. 한 예로 6.2f는 소수점 이상 3자리, 소수점, 소수점 이하 2자리로 출력한다.

소수점은 반올림 처리된다.

소수점 이상 자리수가 소수점을 포함한 전체 길이보다 클 경우는 전체 길이 지정은 무시된다.

소수점 이하 길이가 우선순위가 높다. 소수점 이하 길이를 먼저 처리한 후 나머지 자리수를 맞춘다.

전체 길이 지정이 클 경우 숫자 앞에 공백이 남은 길이만큼 추가된다.

소수점 길이가 클 경우 뒤에 0으로 채워진다.

 

예1) 소수점 이상 3자리, 소수점, 소수점 이하 2자리로 총 6자 길이로 출력된다.

print( "{:6.2f}".format( 123.456 ))
123.46

예2) 소수점은 반올림 처리된다.

print( "{:6.2f}".format( 123.456 ))	# 소수점 3자리에서 반올림
123.46
print( "{:6.2f}".format( 123.451 ))	# 소수점 3자리에서 반올림
123.45

예3) 소수점 이상 자리수가 소수점을 포함한 전체 길이보다 클 경우는 전체 길이 지정은 무시된다.

print( '{:4.2f}'.format( 123.456))	# 전체 길이 4에 맞추어 3.46 또는 123.(4글자)이 출력되는 것이 아니다.
123.46

 예4) 소수점 이하 길이 지정에 대한 우선순위가 높다.

print( '{:1.2f}'.format( 123.456))	# 소수점 2자리를 지정하고 전체길이 1은 무시된다.
123.46

예5) 전체 길이 지정이 클 경우 숫자 앞에 공백이 남은 길이만큼 추가된다.

print( '{:6.2f}'.format( 123.456))
print( '{:7.2f}'.format( 123.456))
print( '{:8.2f}'.format( 123.456))
print( '{:9.2f}'.format( 123.456))
123.46
 123.46
  123.46
   123.46

예6) 소수점 길이가 클 경우 뒤에 0으로 채워진다.

print( '{:6.2f}'.format( 123.456))
print( '{:6.3f}'.format( 123.456))
print( '{:6.4f}'.format( 123.456))
print( '{:6.5f}'.format( 123.456))
print( '{:6.6f}'.format( 123.456))
123.46
123.456
123.4560
123.45600
123.456000
반응형

일반적인 경우 아래 세 개 command로 pytorch에서 GPU를 사용가능한지 확인이 가능하다.

import torch

torch.cuda.is_available()

torch.cuda.get_device_name(0)

torch.cuda.device_count()

 

각각의 command를 설명하면 다음과 같다.

# GPU를 사용할 수 있는 지 알 수 있다.

torch.cuda.is_available()

→ True

 

# GPU 정보를 반환한다. 아래는 0번 GPU 정보를 반환한다.

torch.cuda.get_device_name(0)

'GeForce GTX 1080 Ti'

 

# 사용가능한 GPU 개수를 반환한다. 아래 예제는 2개의 GPU가 있다는 것을 알 수 있다.

torch.cuda.device_count()

→ 2


# 만약 os 세팅을 통해서 GPU 개수를 줄인다면

# 터미널에서 아래와 같이 환경변수 CUDA_VISIBLE_DEVICES를 0으로 설정한 후 python 실행

CUDA_VISIBLE_DEVICES=0 python                 # python 실행

 

# 환경 변수에 의해서 사용가능한 GPU가 0번만 지정되어 1개로 나타난다.

torch.cuda.device_count()

→ 1

 

# 아래와 같이 사용하는 것은 tourch.cuda.device_count() 결과에 영향을 주지 않는다.

CUDA_VISIBLE_DEVICES=0 python                 # python 실행

 

import os

os.environ['CUDA_VISIBLE_DEVICES]  = "0"

torch.cuda.device_count()

→ 2

 

이외 아래와 같은 명령어들이 있다.

# 항상 0을 return

torch.cuda.current_device()

→ 0

 

# device 정보 반환

torch.cuda.device(0)

 

반응형

python용 opencv를 어렵게 설치하고 샘플을 수행했을 때 오류가 나오면 정말 허탈하죠.

이중 아래와 같은 오류는 빈번하게 발생합니다.


python 실행 시 import cv2에서 아래와 같은 오류가 발생할 때


ImportError: /usr/local/lib/libopencv_freetype.so.3.2: undefined symbol: hb_shape


해당 오류에 대한 trackback은 아래와 같으며


trackback URL → https://github.com/opencv/opencv_contrib/issues/919


위 글의 중간 쯤에 "Kumataro"란 유저가 해결방법을 남겼습니다. ( Kumataro commented on Dec 27, 2016 • edited )

아래는 Kumataro 해결법에 대한 연결경로입니다. 아래로 직접 가셔도 되요.

연결 URL → https://github.com/Kumataro/opencv_contrib/commit/cf8c1aad2771c325b8ffffd71f31fcdc84166b68


지금 쓰고 있는 글도 위를 토대로 제가 당한 문제를 해결하고 나서 작성한 것입니다.


□ 해결방법

참고) 저의 환경은 python 2.7 - opencv 3.2.0 입니다. opencv 설치 문제이므로 python은 2.7이든 3.X든 동일한 문제가 납니다.


아래 파일을 오픈합니다.

~/opencv/opencv_contrib-3.2.0/modules/freetype/CMakeLists.txt


해당 파일의 22번째 줄을 주석처리하고 아래 파란색 명령을 추가합니다.

즉,  freetype2_LIBRARIES와 harfbuzz_LIBRARIES이 제대로된 경로를 못찾아주어서 발생하는 오류입니다.


if( FREETYPE_FOUND AND HARFBUZZ_FOUND )

#  ocv_define_module(freetype opencv_core opencv_imgproc PRIVATE_REQUIRED ${freetype2_LIBRARIES} ${harfbuzz_LIBRARIES} WRAP python)

   ocv_define_module(freetype opencv_core opencv_imgproc PRIVATE_REQUIRED ${FREETYPE_LIBRARIES} ${HARFBUZZ_LIBRARIES} WRAP python)

   ocv_include_directories( ${FREETYPE_INCLUDE_DIRS} ${HARFBUZZ_INCLUDE_DIRS}     

)


이후, ~/opencv/opencv-3.2.0/build 디렉토리에서 

cmake -D CMAKE_BUILD_TYPE=RELEASE \

-D CMAKE_INSTALL_PREFIX=/usr/local \

-D WITH_TBB=OFF \

-D WITH_IPP=OFF \

-D WITH_1394=OFF \

-D BUILD_WITH_DEBUG_INFO=OFF \

-D BUILD_DOCS=OFF \

-D INSTALL_C_EXAMPLES=ON \

-D INSTALL_PYTHON_EXAMPLES=ON \

-D BUILD_EXAMPLES=OFF \

-D BUILD_TESTS=OFF \

-D BUILD_PERF_TESTS=OFF \

-D ENABLE_NEON=ON \

-D WITH_QT=ON \

-D WITH_OPENGL=ON \

-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.2.0/modules \

-D WITH_V4L=ON  \

-D WITH_FFMPEG=ON \

-D WITH_XINE=ON \

-D BUILD_NEW_PYTHON_SUPPORT=ON \

../ 

를 다시 수행시켜 주세요. 문제가 있던 opencv를 uninstall하실 필요는 없습니다.

대부분 이미 설정이 완료되어 있으므로 금방 끝납니다. 


-- Configuring done
-- Generating done
-- Build files have been written to: /home/webnautes/opencv/opencv-3.2.0/build


이와 같은 문구를 빠르게 보게 될 겁니다.


이제 다시 컴파일을 합니다.

 ~/opencv/opencv-3.2.0/build$ time make -j12


제 컴퓨터는 CPU 코어수가 12개라 -j12입니다. 컴파일 전에 본인의 CPU 코어수를 확인해야할 필요가 있죠.

다음과 같은 명령으로 쉽게 확인이 가능합니다.

 cat /proc/cpuinfo | grep processor | wc -l 


컴파일도 대부분 이미 완료되었으므로 빠르게 끝납니다.

이제 마지막 재설치 작업만 남았군요. 별건 없고 아래 명령으로 끝~

 ~/opencv/opencv-3.2.0/build$ sudo make install


문제가 된 python 소스를 실행 시켜보시면 잘 실행 될 것입니다.

그래도 해결이 안된다면... 건투를 빕니다. 당신은 꼭 해결방법을 찾을 것입니다. 그때 다시 오셔서 지식을 나눠주세요. 


반응형

Anaconda3 Python3  환경에서 OpenCV3 설치할 때 참고하면 좋은 사이트입니다.


본문 내용 중 


Python3 OpenCV3 설치 - Anaconda3

Python 3.5 설치 후, OpenCV3 를 설치하는 과정이 쉽지만은 않습니다.


기본적으로 설치 파일에는 Python 3 버전을 지원하지 않기 때문에 입니다. 소스를 다운받아 컴파일 해야하는데 여러가지 환경문제로 컴파일도 쉽지 않습니다.

그래서, 여기서는 좀 더 쉽게 Anaconda를 이용하여 설치해 봅니다.


검색일자   2017.06.18

원문 URL   http://wandlab.blogspot.kr/2016/11/python3-opencv3-anaconda3.html

반응형

+ Recent posts