(엔지니어를 위한) 파이썬 시작하기[10]
내용 : 외부라이브러리(패키지) 다루기
참조 : https://wikidocs.net/133199 (점프투 파이썬 외부라이브러리 다루기)
0.시작하며
앞에서 모듈과 패키지에 대해서 알아봤다. math 같은 모듈은 파이썬을 설치할 때 같이 설치되는 builtin 모듈이었다. 이번 챕터에서는 외부 라이브러리(패키지). 즉 다른 사람들이 만들어서 공유한 패키지들을 설치하고 관리하는 것에 대해서 알아본다. 파이썬은 많은 패키지들이 있다.
1. 외부 패키지 설치 및 제거 pip
지금까지 여러분들은 파이썬의 기초를 배웠다. 이제부터는 파이썬의 진짜 강력한 파워인 외부 패키지들을 설치하고 사용해보자. math 같은 builtin 패키지는 따로 설치할 필요가 없었다. 외부 패키지들은 따로 설치를 한 수 사용해야 한다.
파이썬모듈들을 모아놓은 곳이 있다.
아래쪽 정보를 보면 약 40만개의 프로젝트들이 등록 되어있다. 이 사이트 덕분에 우리는 간단하게 패키지들을 찾아보고 설치할 수 있다.
이곳에 올라와 있는 모듈이나 패키지를 설치하려면 아래와 같이 pip명령을 이용한다. 예를 들어서 단위계를 맞춰주는 forallpeople이라는 패키지를 설치해보자.
구글검색을 하면 소스코드를 관리하고 공유하는 사이트인 깃허브 사이트와 pypi.org사이트가 검색이 된다. 이 사이트에서 설명을 보고 사용법을 익히면 된다.
https://github.com/connorferster/forallpeople
https://pypi.org/project/forallpeople/
설치는 anaconda propmt상태에서 아래와 같이 입력하면 된다.
(base) D:\dev\ESC>pip install forallpeople
|
새로운 패키지를 설치한 다음에 잘 설치되었는지 확인하는 방법은 python인터프리터를 켜고 import해보는 것이다. 에러 메시지가 없으면 잘 설치된 것이다.
(base) D:\dev\ESC>python
Python 3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import forallpeople
|
설치된 패키지(모듈) 확인하기
자신의 컴퓨터에 설치된 패키지를 확인하기 위해서는 아래와 같이 pip list를 입력면 설치된 모든 패키지(모듈)의 리스트를 볼 수 있다. 방금 전에 설치한 forallpeople과 버전을 확인할 수 있다.
(base) D:\dev\ESC>pip list
. . . <중간생략>
forallpeople 2.6.3
. . . <이후생략>
|
패키지는 어디에 설치되는 것일까?
pip로 설치하는 패키지는 어디에 설치되는 것일까? pip show 패키지명으로 패키지에 관한 요약을 볼 수 있다.
(base) D:\dev\ESC>pip show forallpeople
Name: forallpeople
Version: 2.6.3
Summary: The SI Units: "For all people, for all time"
Author: Connor Ferster
Author-email: connorferster@gmail.com
License:
Location: c:\programdata\anaconda3\lib\site-packages
Requires:
Required-by:
|
Location정보를 보면 c:\programdata\anaconda3\lib\site-packages 여기에 설치된 것을 알 수 있다. 만약 아나콘다를 설치하지 않았다면 이 위치가 아닐 수 있다. 예를 들어 python을 직접 설치했다면 다른 디렉토리에 python실행파일도 있을 것이고 lib, site-package 디렉토리가 있을 것이다. 아나콘다 prompt에서 pip install을 하면 anaconda환경에 패키지가 설치되는 것이고 다른 환경에서 설치하면 해당 디렉토리에 패키지가 설치되는 것이다. 이점을 주의해야 한다. 환경이 여러개가 될 수 있다는 것이다. 추후에 가상환경이라는 것을 소개하겠다.
해당 site-package 디렉토리로 가서 구경좀 해보자. 디렉토리로 이동해서 dir명령을 쳐보면 forallpeople 관련 디렉토리가 두개가 있는 것을 확인할 수 있다.
(base) C:\ProgramData\Anaconda3\Lib\site-packages>dir
2022-09-08 오전 11:34 <DIR> forallpeople
2022-09-08 오전 11:34 <DIR> forallpeople-2.6.3.dist-info
|
site-package 디렉토리를 잘 기억해두자. 앞으로 우리가 만들 패키지를 여기에 위치시켜서 import할 것이다.
패키지 제거
것이설치된 패키지를 제거하는 명령은 pip uninstall 패키지이름이다.
(base) D:\dev\ESC>pip uninstall forallpeople
|
2. 단위 제어 패키지 소개 (forallpeople)
엔지니어들은 단위에 민감하다. 단위 제어용 패키지 forallpeople를 설치했고 사용법을 알아보자. 사용법은 보통 pypi.org 사이트나 github 사이트를 참조한다. 프로그램을 만든 사람들이 올려놓은 문서를 참조하면 된다. github사이트에 가보자. 설치법부터 간단한 설명, 예제 등이 올라와 있다.
https://github.com/connorferster/forallpeople
간단한 사용법을 따라해보자.
작용하중을 kN단위로, 폭과 높이를 각각 mm단위로 입력하고 응력을 구해보자. import할 때 si라는 별칭을 지정했다. 그리고 환경을 정의해줄 때 ‘structural’이라는 옵션을 지정했다. top_level=True로 입력하면 kN으로 쓸 수 있고 False로 지정하면 si.kN으로 입력해야 한다. 단위는 숫자 뒤에 써주면 된다. f=p/b/h 이렇게 계산했다. p,b,h에 단위가 포함되어 있기 때문에 결과 f에는 kPa이라는 단위가 포함되어있는 것을 알 수 있다.
>>> import forallpeople as si
>>> si.environment('structural', top_level=True)
>>> p=10*kN
>>> b=1000*mm
>>> h=500*mm
>>> f=p/b/h
>>> f
20.000 kPa
|
그런데 kPa이라는 단위가 눈에 거슬린다. 우리는 응력의 단위는 MPa로 쓰고 싶다. 이런 경우 prefix 속성을 사용하면 된다. Pa이 단위 이고 그 앞의 k, M 등이 prefix다. prefix를 ‘M’로 지정해주면 알아서 20 kPa을 0.020 Mpa로 변경해준다.
>>> f=f.prefix('M')
>>> f
0.020 MPa
|
포맷팅에도 단위가 먹힐까? 테스트 해보자
>>> f"stress = {f}"
'stress = 0.020 MPa'
|
f-string 포맷팅을 적용했다. MPa이라는 단위를 쓰지 않아도 f에 MPa이 포함된 것을 알 수 있다.
자세한 것은 깃허브사이트를 참고하자.
3. 패키지 찾아서 돌려보기(단면상수 구하는 패키지)
파이썬의 바다에는 정말 많은 패키지들이 있다. 그냥 구글에서 자신이 원하는 기능을 검색해보자. 물론 검색어에 python이라는 단어를 포함해서 검색해보면 된다.
일단 파이썬을 할 줄 알게 되면 오픈소스 찾아보고 테스트해보는 것이 취미생활이 될 것이다. 대부분의 문서들은 간단하게 테스트할 수 있는 코드들을 제공한다.
구조물의 단면상수를 구하는 패키지가 분명 있을 것 같다. google에서 python section property로 검색해보자.
맨 위에 있는 사이트를 방문해보자.
Documentation — sectionproperties 2.1.3 documentation
https://sectionproperties.readthedocs.io/en/latest/
설치방법은 아래와 같다.
pip install sectionproperties
|
위 url에 접근했을 대 나와 있는 코드를 실행해보자. 코드를 긁어서 에디터에 붙여넣고 이름을 sprop01.py라 저장했다.
<sprop01.py>
import sectionproperties.pre.library.steel_sections as steel_sections
from sectionproperties.analysis.section import Section
# create geometry of the cross-section
geometry = steel_sections.i_section(d=203, b=133, t_f=7.8, t_w=5.8, r=8.9, n_r=8)
# generate a finite element mesh
geometry.create_mesh(mesh_sizes=[10])
# create a Section object for analysis
section = Section(geometry)
# calculate various cross-section properties
section.calculate_geometric_properties()
section.calculate_warping_properties()
# print some of the calculated section properties
print(section.get_area()) # cross-section area
print(section.get_ic()) # second moments of area about the centroidal axis
print(section.get_j()) # torsion constant
print(section.get_As()) # shear areas in the x & y directions
|
프로그램을 실행시키면 아래와 같이 결과가 나온다. 소스코드의 commnet에 나와있는대로 단면적, 단면2차모멘트, 비틀림상수, 전단면적이다.
(base) D:\dev\sectionproperties>python sprop01.py
3231.797635498484
(23544664.294320498, 3063383.068157863, -1.862645149230957e-08)
62954.4326107353
(1842.2372040432651, 1120.1935881701659)
|
코드를 살펴보면 steel_section.i_section()이라는 함수가 있다. 아마도steel_section에 여러가지 형상의 단면들의 제원을 입력할 수 있는 함수들이 정의 되어있을 것이다. i_section의 제원을 입력하도록 하고 있다. 우리 6번째 강좌에서 이와 비슷한 함수를 만들어본 적 있다.
geometry = steel_sections.i_section(d=203, b=133, t_f=7.8, t_w=5.8, r=8.9, n_r=8)
|
이 패키지의 기능은 여기서 끝나지 않는다. example gallery에 가보자.
https://sectionproperties.readthedocs.io/en/latest/sphinx_gallery_examples/index.html
뭔가 강력한 기능이 있는 것 같다. 그림도 보이고 아래쪽 세번째는 강+콘크리트 합성단면도 보인다. 일단 위쪽 세번째 것을 테스트 해보자. 해당 그림을 클릭하고 들어가면 코드를 다운 받을 수 있다. 코드의 길이는 81줄 밖에 안된다. comment를 빼고 나면 길지 않은 코드다.
예제 파일 이름은 03_custom.py다. 실행을 해보면 메시나눠진 생태의 그림창이 보이고 그림창을 닫으면 계산결과를 보여주는 그림창이 뜬다.
(base) D:\dev\sectionproperties>python 03_custom.py
|
<메시 완료단계>
<계산 완료단계>
몇가지 외부 패키지를 소개했다. pypi에 등록된 40여 만개의 패키지 중에 내가 필요로 하는 기능이 분명 있을 것이다. 만약 없다면 내가 필요로 하는 기능을 다른 사람도 필요로 할 것이니 내가 만들어서 등록하는 것은 어떨까?
python을 어느정도 할 줄 알게 되면 구글링해서 내가 원하는 패키지를 찾는 것이 재미있다. 신세계를 만나는 기분이다.