[PYTHON/COMMON] 모듈 : __version__ 변수를 사용해 모듈 버전 구하기
■ 모듈에서 __version__ 변수를 사용해 모듈 버전을 구하는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 9 |
import langchain print(langchain.__version__) """ 0.2.5 """ |
■ 모듈에서 __version__ 변수를 사용해 모듈 버전을 구하는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 9 |
import langchain print(langchain.__version__) """ 0.2.5 """ |
■ __file__ 변수를 사용해 모듈의 파일 경로를 구하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import datetime import os import pandas as pd print(f"datetime : {datetime.__file__}") print(f"os : {os.__file__ }") print(f"pd : {pd.__file__ }") """ datetime : /usr/lib/python3.10/datetime.py os : /usr/lib/python3.10/os.py pd : /home/king/testproject/env/lib/python3.10/site-packages/pandas/__init__.py """ |
■ __import__ 함수를 사용해 동적으로 모듈을 임포트하는 방법을 보여준다. ▶ 예제 코드 1 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
def loadModule(moduleName): module = __import__(moduleName) return module datetimeModule = loadModule("datetime") print(datetimeModule) """ <module 'datetime' from '/usr/lib/python3.10/datetime.py'> """ |
▶ 예제 코드 2 (PY)
1 2 3 4 5 6 7 8 9 10 11 |
mathModule = __import__("math", fromlist = ["sqrt"]) resultValue = mathModule.sqrt(16) print(resultValue) """ 4.0 """ |
▶
■ import_module 함수를 사용해 동적으로 모듈을 임포트하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import importlib def loadModule(moduleName): module = importlib.import_module(moduleName) return module datetimeModule = loadModule("datetime") print(datetimeModule) """ <module 'datetime' from '/usr/lib/python3.10/datetime.py'> """ |
■ __name__ 변수를 사용해 모듈명을 구하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 |
def main(): print("이 코드는 직접 실행됩니다.") if __name__ == "__main__": main() """ 이 코드는 직접 실행됩니다. """ |
■ 절대/상대 경로를 사용해 모듈을 지정하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
mod aaa { pub mod bbb { pub mod ccc { pub fn print() { println!("aaa::bbb::ccc::print"); } } } pub mod ddd { pub mod eee { pub fn print() { println!("aaa::ddd:eee:print"); } } pub mod fff { pub fn print() { super::eee::print(); super::super::bbb::ccc::print(); } } } } fn main() { aaa::bbb::ccc::print(); aaa::ddd::eee::print(); crate::aaa::ddd::fff::print(); } |
■ 모듈을 파일로 분리해서 사용하는 방법을 보여준다. ▶ src/random/linear.rs
1 2 3 4 5 6 7 8 9 10 11 12 |
use std::num::Wrapping; pub fn get_random_value(seed : &mut u32) -> u32 { let (a, c) = (134775813u32, 12345u32); *seed = (Wrapping(*seed) * Wrapping(a) + Wrapping(c)).0; return *seed; } |
▶ src/random/xorshift.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
pub fn get_random_value(seed : &mut u32) -> u32 { let mut y : u32 = *seed; y ^= y << 13; y ^= y >> 17; y ^= y << 5; *seed = y; return y; } |
▶ src/random/mod.rs
1 2 3 4 |
pub mod linear; pub mod xorshift; |
▶ src/main.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mod random; use crate::random::{linear, xorshift}; fn main() { let mut seed : u32 = 1u32; let random_value1 : u32 = linear::get_random_value(&mut seed); let random_value2 : u32 = xorshift::get_random_value(&mut seed); println!("{}, {}", random_value1, random_value2); } |
test_project.zip
■ 단일 파일에서 복수 모듈를 사용하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
mod random { pub mod linear { use std::num::Wrapping; pub fn get_random_value(seed : &mut u32) -> u32 { let (a, c) = (134775813u32, 12345u32); *seed = (Wrapping(*seed) * Wrapping(a) + Wrapping(c)).0; return *seed; } } pub mod xorshift { pub fn get_random_value(seed : &mut u32) -> u32 { let mut y : u32 = *seed; y ^= y << 13; y ^= y >> 17; y ^= y << 5; *seed = y; return y; } } } use random::{linear, xorshift}; fn main() { let mut seed1 : u32 = 12345u32; let mut seed2 : u32 = 12345u32; for i in 0..10 { let random_value1 : u32 = linear::get_random_value (&mut seed1) % 6 + 1; let random_value2 : u32 = xorshift::get_random_value(&mut seed2) % 6 + 1; println!("{:2} : {}, {}", i + 1, random_value1, random_value2); } } /* 1 : 1, 3 2 : 4, 4 3 : 3, 5 4 : 4, 3 5 : 5, 6 6 : 6, 1 7 : 5, 1 8 : 2, 3 9 : 3, 5 10 : 6, 5 */ |
■ super 키워드를 사용해 상위 모듈을 참조하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
mod main_module { pub mod subsidary_module1 { pub fn get_value() -> u32 { return 1; } } pub mod subsidary_module2 { pub fn get_value() -> u32 { return super::subsidary_module1::get_value() + 1; } } } use main_module::subsidary_module2::get_value; fn main() { println!("{}", get_value()); } /* 2 */ |
■ modules 변수를 사용해 현재 로드된 모듈의 딕셔너리를 구하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 |
import sys dictionary = sys.modules print(dictionary) |
■ reload 함수를 사용해 모듈을 다시 로드하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 |
import importlib import math importlib.reload(math) |
■ __name__ 변수를 사용해 메인 모듈 여부를 구하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 |
if __name__ == "__main__": print("Hello world") |
■ Remove-Module 명령에서 -Name 스위치를 사용해 현재 세션에서 모듈을 제거하는 방법을 보여준다. ▶ 실행 명령
1 2 3 |
Remove-Module -Name DnsClient |
■ New-Module 명령에서 -ScriptBlock 스위치를 사용해 동적 모듈을 생성하는 방법을 보여준다. ▶ 실행 명령
1 2 3 |
New-Module -ScriptBlock { function HelloModule { "Hello Module World!" } } |
※ HelloModule 명령을 실행하면 "Hello Module World!"가
■ Import-Module 명령에서 -Name 스위치를 사용해 DNS 클라이언트 모듈을 로드하는 방법을 보여준다. ▶ 실행 명령
1 2 3 |
Import-Module -Name DnsClient |
■ Get-Module 명령을 사용해 현재 세션에서 사용 가능한 모듈 리스트를 구하는 방법을 보여준다. ▶ 실행 명령
1 2 3 4 5 6 7 8 9 10 11 12 |
Get-Module [결과] ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Script 1.0.0.0 ISE {Get-IseSnippet, Import-IseSnippet, New-IseSnippet} Manifest 1.0.1.0 Microsoft.PowerShell.Archive {Compress-Archive, Expand-Archive} Manifest 3.1.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Content...} Manifest 3.1.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type, Clear-Variable, Compare-Object...} |
■ Get-Module 명령에서 -ListAvailable 스위치를 사용해 이용 가능한 모듈 리스트를 구하는 방법을 보여준다. ▶ 실행 명령
1 2 3 |
Get-Module -ListAvailable |
■ IModuleManager 클래스의 LoadModule 메소드를 사용해 수동으로 모듈을 로드하는 방법을 보여준다. [TestLibrary 프로젝트] ▶ ViewA.xaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<UserControl x:Class="TestLibrary.Views.ViewA" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignWidth="600" d:DesignHeight="450"> <Grid> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="36" Text="View A" /> </Grid> </UserControl> |
▶ ViewA.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
using System.Windows.Controls; namespace TestLibrary.Views { /// <summary> /// View A /// </summary> public partial class ViewA : UserControl { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - ViewA() /// <summary> /// 생성자 /// </summary> public ViewA() { InitializeComponent(); } #endregion } } |
▶ TestLibraryModule.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
using Prism.Ioc; using Prism.Modularity; using Prism.Regions; using TestLibrary.Views; namespace TestLibrary { /// <summary> /// 테스트 라이브러리 모듈 /// </summary> public class TestLibraryModule : IModule { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Public #region 초기화시 처리하기 - OnInitialized(containerProvider) /// <summary> /// 초기화시 처리하기 /// </summary> /// <param name="containerProvider">컨테이너 공급자 인터페이스</param> public void OnInitialized(IContainerProvider containerProvider) { IRegionManager regionManager = containerProvider.Resolve<IRegionManager>(); regionManager.RegisterViewWithRegion("ContentRegion", typeof(ViewA)); } #endregion #region 타입 등록하기 - RegisterTypes(containerRegistry) /// <summary> /// 타입 등록하기 /// </summary> /// <param name="containerRegistry">컨테이너 레지스트리 인터페이스</param> public void RegisterTypes(IContainerRegistry containerRegistry) { } #endregion } } |
■ PrismApplication 클래스를 사용해 디렉토리에서 모듈을 로드하는 방법을 보여준다. [TestLibrary 프로젝트] ▶ ViewA.xaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<UserControl x:Class="TestLibrary.Views.ViewA" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignWidth="600" d:DesignHeight="450"> <Grid> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="36" Text="View A" /> </Grid> </UserControl> |
▶ ViewA.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
using System.Windows.Controls; namespace TestLibrary.Views { /// <summary> /// View A /// </summary> public partial class ViewA : UserControl { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - ViewA() /// <summary> /// 생성자 /// </summary> public ViewA() { InitializeComponent(); } #endregion } } |
▶ TestLibraryModule.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
using Prism.Ioc; using Prism.Modularity; using Prism.Regions; using TestLibrary.Views; namespace TestLibrary { /// <summary> /// 테스트 라이브러리 모듈 /// </summary> public class TestLibraryModule : IModule { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Public #region 초기화시 처리하기 - OnInitialized(containerProvider) /// <summary> /// 초기화시 처리하기 /// </summary> /// <param name="containerProvider">컨테이너 공급자 인터페이스</param> public void OnInitialized(IContainerProvider containerProvider) { IRegionManager regionManager = containerProvider.Resolve<IRegionManager>(); regionManager.RegisterViewWithRegion("ContentRegion", typeof(ViewA)); } #endregion #region 타입 등록하기 - RegisterTypes(containerRegistry) /// <summary> /// 타입 등록하기 /// </summary> /// <param name="containerRegistry">컨테이너 레지스트리 인터페이스</param> public void RegisterTypes(IContainerRegistry containerRegistry) { } #endregion } } |
[TestProject 프로젝트]
■ PrismApplication 클래스를 사용해 코드로 모듈을 로드하는 방법을 보여준다. [TestLibrary 프로젝트] ▶ ViewA.xaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<UserControl x:Class="TestLibrary.Views.ViewA" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignWidth="600" d:DesignHeight="450"> <Grid> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="36" Text="View A" /> </Grid> </UserControl> |
▶ ViewA.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
using System.Windows.Controls; namespace TestLibrary.Views { /// <summary> /// View A /// </summary> public partial class ViewA : UserControl { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - ViewA() /// <summary> /// 생성자 /// </summary> public ViewA() { InitializeComponent(); } #endregion } } |
▶ TestLibraryModule.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
using Prism.Ioc; using Prism.Modularity; using Prism.Regions; using TestLibrary.Views; namespace TestLibrary { /// <summary> /// 테스트 라이브러리 모듈 /// </summary> public class TestLibraryModule : IModule { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Public #region 초기화시 처리하기 - OnInitialized(containerProvider) /// <summary> /// 초기화시 처리하기 /// </summary> /// <param name="containerProvider">컨테이너 공급자 인터페이스</param> public void OnInitialized(IContainerProvider containerProvider) { IRegionManager regionManager = containerProvider.Resolve<IRegionManager>(); regionManager.RegisterViewWithRegion("ContentRegion", typeof(ViewA)); } #endregion #region 타입 등록하기 - RegisterTypes(containerRegistry) /// <summary> /// 타입 등록하기 /// </summary> /// <param name="containerRegistry">컨테이너 레지스트리 인터페이스</param> public void RegisterTypes(IContainerRegistry containerRegistry) { } #endregion } } |
[TestProject 프로젝트]
■ PrismApplication 클래스에서 app.config 파일을 사용해 모듈을 로드하는 방법을 보여준다. [TestLibrary 프로젝트] ▶ ViewA.xaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<UserControl x:Class="TestLibrary.Views.ViewA" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignWidth="600" d:DesignHeight="450"> <Grid> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="36" Text="View A" /> </Grid> </UserControl> |
▶ ViewA.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
using System.Windows.Controls; namespace TestLibrary.Views { /// <summary> /// View A /// </summary> public partial class ViewA : UserControl { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - ViewA() /// <summary> /// 생성자 /// </summary> public ViewA() { InitializeComponent(); } #endregion } } |
▶ TestLibraryModule.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
using Prism.Ioc; using Prism.Modularity; using Prism.Regions; using TestLibrary.Views; namespace TestLibrary { /// <summary> /// 테스트 라이브러리 모듈 /// </summary> public class TestLibraryModule : IModule { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Public #region 초기화시 처리하기 - OnInitialized(containerProvider) /// <summary> /// 초기화시 처리하기 /// </summary> /// <param name="containerProvider">컨테이너 공급자 인터페이스</param> public void OnInitialized(IContainerProvider containerProvider) { IRegionManager regionManager = containerProvider.Resolve<IRegionManager>(); regionManager.RegisterViewWithRegion("ContentRegion", typeof(ViewA)); } #endregion #region 타입 등록하기 - RegisterTypes(containerRegistry) /// <summary> /// 타입 등록하기 /// </summary> /// <param name="containerRegistry">컨테이너 레지스트리 인터페이스</param> public void RegisterTypes(IContainerRegistry containerRegistry) { } #endregion } } |
[TestProject
■ PYTHONPATH 환경 변수를 사용해 파이썬 라이브러리의 디렉토리를 설정하는 방법을 보여준다. ▶ 실행 명령
1 2 3 4 5 |
※ 도스 모드에서 아래 명령을 실행한다. set PYTHONPATH=c:\TestModules |
■ path 변수를 사용해 파이썬 라이브러리 설치 디렉토리를 추가하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 |
import sys sys.path.append("c:/TestModules") |
■ from … import문을 사용해 모듈의 모든 함수명을 사용하는 방법을 보여준다. ▶ testmodule.py
1 2 3 4 5 6 7 8 9 |
def test1(a, b): return a + b def test2(a, b): return a * b |
▶ main.py
1 2 3 4 5 6 7 8 |
from testmodule import * result1 = test1(10, 20) result2 = test2(30, 40) print(result1, result2) |
■ path 변수를 사용해 파이썬 라이브러리 설치 디렉토리를 구하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 |
import sys print(sys.path) """ ['D:\\TestProject\\TestProject', 'D:\\TestProject\\TestProject', 'C:\\Program Files\\Python310\\python310.zip', 'C:\\Program Files\\Python310\\DLLs', 'C:\\Program Files\\Python310\\lib', 'C:\\Program Files\\Python310', 'D:\\TestProject\\TestProject\\env', 'D:\\TestProject\\TestProject\\env\\lib\\site-packages'] """ |