반응형

줄리아 Julia의 패키지(package)에 대해 다룹니다. 

 

2024. 02. 01  최초 작성




다음 사이트를 참고하고 ChatGPT의 도움을 받았습니다. 

https://techytok.com/lesson-packages/



Julia 개발 환경 구축은 다음 포스트를 참고하세요. 

 

Visual Studio Code 사용한 Julia 개발 환경만들기(Windows / Ubuntu / Macbook M1)

https://webnautes.tistory.com/2216 




Julia 강좌를 진행하고 있습니다.

 

Julia 강좌 1 - 변수와 데이터 타입

https://webnautes.tistory.com/2218 

 

Julia 강좌 2 - 함수, void function,  Optional positional arguments, Keyword arguments

https://webnautes.tistory.com/2220 

 

Julia 강좌 3 - 배열, 튜플, 딕셔너리

https://webnautes.tistory.com/2229 

 

Julia 강좌 4 - 제어문 if ... else, for, break, continue, while, enumerate

https://webnautes.tistory.com/2235 

 

Julia 강좌 5 - 브로드캐스팅(broadcasting)

https://webnautes.tistory.com/2240 

 

Julia 강좌 6 - 변수 유효 범위( Variable Scope ) : 전역(global), 로컬(local)

https://webnautes.tistory.com/2247

 

Julia 강좌 7 - 모듈(module)

https://webnautes.tistory.com/2253 

 

Julia 강좌 8 - 타입(type)

https://webnautes.tistory.com/2260

 

Julia 강좌 9 - 패키지(package)

https://webnautes.tistory.com/2268 





줄리아 패키지를 만드는 방법을 배웁니다. 줄리아 패키지는 모듈과 해당 모듈의 종속성에 대한 정보를 포함합니다. 모듈 대신 패키지를 만들면 패키지를 미리 컴파일할 수 있고(따라서 특히 큰 모듈의 경우 패키지를 연속적으로 로드하는 것이 더 빨라집니다) 모듈이 제대로 작동하는 데 필요한 모든 종속성을 설치하기가 더 쉬워진다는 장점이 있습니다.



패키지 생성하기 

다음 코드를 사용하여 패키지를 생성할 수 있습니다. 

 

using Pkg

Pkg.generate("NewPackage")



아래 스크린샷처럼 프로젝트 폴더 아래에 hello.jl 파일에 위 코드를 저장하여 실행하세요. 본 포스트는 Visual Studio Code에 julia 환경이 구성된 것을 가정하고 진행합니다.  참고로 .vscode 폴더는 Visual Studio Code에서 사용하는 설정이 저장된 폴더입니다. 

 



NewPackage 폴더가 생성된 것을 볼 수 있습니다.  NewPackage 폴더에 모듈 종속성 정보를 저장할 Project.toml 파일이 위치하며 하위 폴더 src에 모듈이 저장되는 NewPackage.jl 파일이 위치합니다. 

 




NewPackage/src에 위치한 NewPackage.jl 파일에는  다음처럼 모듈 NewPackage의 기본 코드가 포함되어 있습니다.

 

module NewPackage

greet() = print("Hello World!")

end # module NewPackage




생성한 패키지 사용해보기

진행시 주의할점은 아래 스크린샷처럼 패키지를 사용할 파일인 hello.jl과 패키지 폴더 NewPackage가 같은 폴더에 존재해야 합니다.

 




이제 다음 코드를 통해 패키지를 활성화하고 테스트할 수 있습니다.  주의할 점은 패키지를 활성화 하는 코드가 없으면 NewPackage 패키지를 찾을 수 없어서 에러가 발생합니다. 

 

# 패키지를 활성화합니다.
using Pkg
Pkg.activate("NewPackage")


# 패키지에 포함된 모듈을 로드하고 모듈의 함수를 호출합니다.
using NewPackage
NewPackage.greet()




실행하면 NewPackage 패키지가 활성화되었다는 메시지가 보인 후, NewPackage 패키지에 포함된 NewPackage 모듈의 greet 함수가 호출되어 Hello World!가 출력됩니다. 뒤에 이상한 문자가 보이는 것은 greet 함수에서  println 대신에 print를 사용하고 있어서입니다.

 



외부 라이브러리 사용하기 위해 종속성 추가

프로젝트에서 외부 라이브러리를 사용하기 위해 종속성을 추가해보겠습니다. 

 

다음 코드를 사용하여 SpecialFunctions 패키지를 설치합니다. 앞에서 사용했던 hello.jl 파일에 작성하세요.

 

using Pkg
Pkg.activate("NewPackage")

Pkg.add("SpecialFunctions")



실행하면 패키지가 설치됩니다.

 



이제 두개의 파일을 작성하여 테스트합니다.



다음 코드처럼  NewPackage/src 경로에 있는  NewPackage.jl 파일을 수정합니다.

 

module NewPackage

# SpecialFunctions의 gamma 함수를 사용할 수 있게됩니다.
using SpecialFunctions

# 외부에서 mySpecialFunction 함수를 모듈 이름 지정하지 않아도 사용할 수 있도록 합니다.
export mySpecialFunction

greet() = print("Hello World!")

# 함수를 추가합니다.
function mySpecialFunction(x)
    return x^2 * gamma(x)
end

end # module NewPackage




다음 코드를 hello.jl 파일에 작성하여 NewPackage 패키지에 추가된 mySpecialFunction 함수를 호출합니다.

 

using Pkg
Pkg.activate("NewPackage")

using NewPackage


# 모듈내에서 export를 선언했기 때문에 모듈이름 NewPackage를 생략해도 됩니다.
println(mySpecialFunction(42))

 



패키지 초기화

프로젝트를 다른 피시로 이동한 후, 프로젝트에 포함된 설정 파일(Project.toml 및 Manifest.toml)에 있는 대로 의존성 있는 패키지를 설치하기 위해 다음 코드를 실행해야 한다고 합니다.  

 

using Pkg
Pkg.instantiate()





반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts