MATLAB Compiler SDK로 배포용 코드 패키징
지원되는 플랫폼: Windows®, Linux®, Mac
이 예제에서는 MATLAB® Compiler SDK™를 사용하여 MATLAB 함수를 배포 가능한 아카이브로 패키징하고 이 함수를 호출하는 샘플 애플리케이션을 만드는 방법을 보여줍니다. 애플리케이션 배포가 동작하는 방법에 대한 자세한 내용은 Steps for Deployment with MATLAB Compiler 항목을 참조하십시오.
이 예제에서는 Python® 패키지를 생성하고 이 패키지를 MATLAB Compiler SDK에서 생성된 Python 애플리케이션에 통합합니다.
선행 조건
MATLABCompiler SDK 사용 및 Python 애플리케이션 실행을 위한 시스템 요구 사항을 충족했는지 확인합니다. 자세한 내용은 MATLAB Compiler SDK Python 타깃 요구 사항 항목을 참조하십시오.
컴파일된 아티팩트의 최종 사용자가 MATLAB에 대한 액세스가 없다면 MATLAB Runtime을 설치해야 합니다. MATLAB Compiler SDK로 빌드된 아티팩트에는 업데이트 레벨이 동일하거나 그 이상이며 일치하는 버전의 MATLAB Runtime이 필요합니다. Python 패키지의 인스톨러에 MATLAB Runtime을 포함하거나 별도로 설치할 수 있습니다. 자세한 내용은 MATLAB Runtime 다운로드 및 설치하기 항목을 참조하십시오.
MATLAB에서 함수 만들기
타깃 언어 애플리케이션에서 호출하려는 MATLAB 코드를 작성합니다. MATLAB 코드를 배포하려면 특정 지침을 따라야 합니다. 자세한 내용은 Write Deployable MATLAB Code 항목을 참조하십시오.
이 예제에서는 재고 관리와 관련된 총 비용을 나타내는 회사의 비용 함수가 다음과 같이 정의된다고 가정합니다.
D는 연간 수요입니다.
Q는 주문량입니다.
S는 주문당 주문 비용입니다.
H는 연간 단위당 보유 비용입니다.
P는 단위당 구매 비용입니다.
MATLAB 함수 fminsearch를 사용하여 총 비용 C(Q)를 최소화하는 주문량 Q를 구할 수 있습니다. 주문량, 연간 수요, 주문당 비용, 연간 단위당 보유 비용, 단위당 구매 비용에 대한 초기 추측값을 받아 최적의 주문량과 비용을 출력하는 fms.m이라는 함수를 만듭니다.
function [Q_optimal, cost_optimal] = fms(Q_initial_guess, D, S, H, P) cost_function = @(Q) D/Q * S + Q/2 * H + D * P; [Q_optimal, cost_optimal] = fminsearch(cost_function, Q_initial_guess) end
샘플 MATLAB 스크립트 만들기
MATLAB Compiler SDK는 내보낸 MATLAB 함수를 호출하는 방법을 보여주는 샘플 코드를 타깃 언어로 생성할 수 있습니다. 이 샘플을 사용하여 자신만의 애플리케이션을 구현하거나 컴파일된 아티팩트를 테스트할 수 있습니다. 자세한 내용은 Create Sample Code to Call Exported Function 항목을 참조하십시오.
정의된 입력값을 사용하여 함수를 호출하는 MATLAB 샘플 스크립트를 만듭니다. 다음 코드를 fmsSample1.m이라는 이름의 샘플 파일에 저장합니다.
% Sample script to demonstrate execution of function [Q_optimal, cost_optimal] = fms(Q_initial_guess, D, S, H, P) Q_initial_guess = 100; % Initialize Q_initial_guess here D = 10000; % Initialize D here S = 50; % Initialize S here H = 0.5; % Initialize H here P = 10; % Initialize P here [Q_optimal, cost_optimal] = fms(Q_initial_guess, D, S, H, P)
패키징 후, 생성된 Python 샘플 코드는 대응되는 MATLAB 샘플 파일과 동일한 입력값을 사용하여 내보낸 함수를 호출합니다.
MATLAB 코드를 배포 가능한 아카이브로 패키징하기
MATLAB 명령줄에서 또는 그래픽 인터페이스를 사용하여 배포 가능한 아카이브를 빌드할 수 있습니다. 어떤 패키징 방법을 사용할지 선택하는 방법에 대한 자세한 내용은 Choose Deployment Option 항목을 참조하십시오.
이 예제에서는 compiler.build.pythonPackage 함수를 사용하여 Python 패키지를 빌드합니다.
compiler.build.pythonPackage함수와fms.m함수를 사용하여 Python 패키지를 빌드합니다. 이름-값 인수를 사용하여 패키지 이름을 지정하고 샘플 파일을 추가합니다.compiler.build명령에서 이름-값 인수를 사용하여 추가 옵션을 지정할 수 있습니다. 자세한 내용은compiler.build.pythonPackage항목을 참조하십시오.buildResults = compiler.build.pythonPackage("fms.m", ... PackageName="Optimize", ... SampleGenerationFiles="fmsSample1.m", ... Verbose="on");
compiler.build.Results객체buildResults에는 빌드 유형, 생성된 파일, 포함된 지원 패키지, 빌드 옵션에 대한 정보가 포함됩니다.이 함수는 현재 작업 디렉터리에 있는
OptimizepythonPackage라는 이름의 폴더 내에 다음 파일을 생성합니다.samples\fmsSample1.py— Python 샘플 애플리케이션.Optimize\__init__.py— 패키지 가져오기를 용이하게 해 주는 Python 초기화 코드.Optimize\Optimize.ctf— Python 패키지가 포함되어 있는 배포 가능한 아카이브.GettingStarted.html— 패키지 통합에 대한 정보가 포함되어 있는 HTML 파일.includedSupportPackages.txt— 패키지에 포함된 모든 지원 파일을 나열하는 텍스트 파일.mccExcludedFiles.log— 애플리케이션에 포함되지 않은 툴박스 함수 목록이 포함되어 있는 로그 파일. 지원되지 않는 함수에 대한 자세한 내용은 MATLAB Compiler 제한 사항 항목을 참조하십시오.pyproject.toml— 빌드 시스템 요구 사항 및 정보가 포함되어 있는 구성 파일로,pip에서 패키지를 빌드하는 데 사용합니다. 자세한 내용은pip.pypa.io/en/stable/reference/build-system/pyproject-toml항목을 참조하십시오.readme.txt— 패키징 정보와 인터페이스 정보가 포함되어 있는 텍스트 파일.requiredMCRProducts.txt— MATLAB Runtime에서 애플리케이션을 실행하는 데 필요한 제품의 제품 ID가 포함되어 있는 텍스트 파일.setup.py—Optimize패키지를 설치하는 Python 스크립트.unresolvedSymbols.txt— 연결이 맺어지지 않은 기호에 대한 정보가 포함되어 있는 텍스트 파일.
참고
생성된 패키지는 MATLAB Runtime 또는 인스톨러를 포함하지 않습니다.
buildResults객체를 사용하여 인스톨러를 만들려면compiler.package.installer항목을 참조하십시오.
생성된 샘플 애플리케이션 설치 및 실행하기
Python 패키지를 만든 후에는 Python 애플리케이션에서 fms 함수를 호출할 수 있습니다. 패키징된 MATLAB 함수를 호출하는 애플리케이션을 만드는 방법에 대한 자세한 내용은 Integrate Artifact with Target Language Application 항목을 참조하십시오.
이 예제에서는 패키징 중에 생성된 샘플 Python 코드 OptimizepythonPackage\samples\fmsSample1.py를 사용합니다. 이 샘플 애플리케이션 코드를 가이드로 참고하여 Python 애플리케이션을 직접 작성할 수 있습니다.
#!/usr/bin/env python
"""
Sample script that uses the Optimize package created using
MATLAB Compiler SDK.
Refer to the MATLAB Compiler SDK documentation for more information.
"""
import Optimize
# Import the matlab module only after you have imported
# MATLAB Compiler SDK generated Python modules.
import matlab
try:
my_Optimize = Optimize.initialize()
except Exception as e:
print('Error initializing Optimize package\\n:{}'.format(e))
exit(1)
try:
Q_initial_guessIn = matlab.double([100], size=(1, 1))
DIn = matlab.double([10000], size=(1, 1))
SIn = matlab.double([50], size=(1, 1))
HIn = matlab.double([0.5], size=(1, 1))
PIn = matlab.double([10], size=(1, 1))
Q_optimalOut, cost_optimalOut = my_Optimize.fms(Q_initial_guessIn, DIn, SIn, HIn, PIn, nargout=2)
print(Q_optimalOut, cost_optimalOut, sep='\n')
except Exception as e:
print('Error occurred during program execution\\n:{}'.format(e))
my_Optimize.terminate()Python 샘플 애플리케이션은 다음을 수행합니다.
Optimize패키지 가져오기예외 처리를 위해
try-catch블록 사용my_Optimize라는Optimize객체 초기화각 입력 인수에 대한
matlab.double객체 생성fms메서드를 호출하고 출력값을Q_optimalOut및cost_optimalOut에 저장Q_optimalOut및cost_optimalOut의 내용 인쇄my_Optimize인스턴스 종료
시스템 명령 프롬프트에서 MagicSquarePkgpythonPackage 폴더로 이동합니다. python 명령을 사용하여 Optimize 패키지를 설치합니다.
python -m pip install .
Python 패키지 설치에 대한 자세한 내용은 Install and Import MATLAB Compiler SDK Python Packages 항목을 참조하십시오.
MATLAB Runtime을 설치했으면 시스템 명령 프롬프트에서 애플리케이션을 실행할 수 있습니다. 테스트가 목적이라면 명령 앞에 ! 연산자를 붙여 MATLAB 명령 창에서 명령을 실행할 수도 있습니다.
python fmsSample1.py
Python 샘플 애플리케이션은 샘플 MATLAB 스크립트와 동일한 출력값을 반환합니다.
1414.2135620117188 100707.10678118655
참고
macOS에서는 python 대신 mwpython 스크립트를 사용해야 합니다. 예: mwpython fmsSample1.py.
mwpython 스크립트는 폴더에 있으며, 여기서 matlabroot/binmatlabroot는 MATLAB 또는 MATLAB Runtime 설치 위치입니다.
참고 항목
compiler.build.pythonPackage | mwpython