PkgTemplates는 Julia에서 project 쉽게 생성하는 것을 도와 주는 패키지 이다.
아래 예에서 /home/shpark/julia_test 아래 myApp3 라는 패키지를 만드는 법을 보여 준다
설치와 사용법은 아래와 같다.
julia>]
pkg> add PkgTemplates
julia> using PkgTemplates
# user : 원하는 아무 이름으로 (필수)
# dir : 프로젝트 폴더를 만들 상위 폴더를 지정
# 아래에서는 "/home/shpark/julia_test" 폴더 아래 "MyApp3" 프로젝트 폴더가 생긴다.
# Template(;user="kpop",dir="/home/shpark/julia_test")("MyApp3")로도 사용 가능
julia> t = Template(;user="kpop",dir="/home/shpark/julia_test")
julia> t("MyApp3")
# 위와 같이 하면 라애 처럼 julia 프로젝트가 생성되고 필요한 파일들을 자동으로 생성 한다.
MyApp3
├── LICENSE
├── Manifest.toml
├── Project.toml
├── README.md
├── src
│ └── MyApp3.jl
└── test
└── runtests.jl
# Julia에서 위에서 생성한 프로젝트 폴더를 지정하면 julia에서 프로젝트를 사용 할 수 있다.
# package를 추가 하면 Project.toml에 자동으로 추가 된다.
$ julia -q
julia> ]
pkg> activate /home/shpark/julia_test/MyApp3
(MyApp3) pkg> add Plots
이전 글에서 실행 파일 만드는 법을 게시 했는데 위의 프로젝트를 사용해서 다시 구성 해보자
참조 : https://julialang.kr/?p=2661
단 이번 예제는 Plots package의 plot을 사용한다.
compile되지 않은 상태에서 using Plots 시에 5.958146 초 정도 걸리며 plot 호출시 6초 정도 걸린다. plot, display까지 호출하면 14초 정도 걸린다.
실행파일을 구성하여 실행시 using Plots 는 0.001초 미만 , plot 호출은 0.01초 정도 걸리고 , plot과 display까지 호출하면 2.4초 정도 걸린다.
실행파일 만들기
MyApp3.jl 소스
module MyApp3
@time using Plots
function julia_main()::Cint
try
real_main()
catch
Base.invokelatest(Base.display_error,
Base.catch_stack())
return 1
end
return 0
end
function real_main()
# 외부 입력 파라미터가 필요하면
# ARGS를 사용하면 됨
@time begin
p = plot(rand(5), rand(5))
display(p)
end
readline()
end
if abspath(PROGRAM_FILE) == @__FILE__
real_main()
end
end # Module
precompile_app.jl
using MyApp3
push!(ARGS,"")
MyApp3.julia_main()
실행파일 만들기
julia> using PackageCompiler
julia> create_app("/home/shpark/julia_test/MyApp3","/home/shpark/julia_test/MyApp3/build",precompile_execution_file="/home/shpark/julia_test/MyApp3/precompile_app.jl",force=true)
실행결과

MyApp3.so를 직접 호출해서 성능 살펴 보기
$ cd /home/shpark/julia_test/MyApp3/build/bin
$ julia -q -JMyApp3.so
julia> @time using Plots
0.000650 seconds (1.95 k allocations: 98.203 KiB)
julia> @time plot(rand(5), rand(5))
0.001040 seconds (2.23 k allocations: 148.398 KiB)
julia> @time (p = plot(rand(5), rand(5)); display(p))
2.461515 seconds (96.80 k allocations: 4.867 MiB)
MyApp3.so 를 사용 없이 julia에서 실행 한 경우
$ cd /home/shpark/julia_test/MyApp3/build/bin
$ julia -q
julia> @time using Plots
6.006328 seconds (8.12 M allocations: 489.579 MiB, 1.48% gc time)
julia> @time plot(rand(5), rand(5))
5.869596 seconds (9.80 M allocations: 489.327 MiB, 4.59% gc time)
# plot과 display를 같이 호출 하기 위해 julia를 다시 실행한다.
# 위에 plot 실행으로 plot이 이미 컴파일 되었기 때문에
julia> exit()
$ julia -q
julia> using Plots
julia> @time (p = plot(rand(5), rand(5)); display(p))
14.251147 seconds (17.86 M allocations: 893.889 MiB, 1.43% gc time)