[Python] python modules import 하는 3가지 테크닉

2021. 3. 2. 20:53꿀팁 분석 환경 설정/파이썬 개발 팁

towardsdatascience.com/3-advance-techniques-to-effortlessly-import-and-execute-your-python-modules-ccdcba017b0c

 

3 Techniques to Effortlessly Import and Execute your Python Modules

How to Make your Python Modules User Friendly

towardsdatascience.com

 

1. Import Everything

Scenario

utils.py에 있는 모든 함수와 클래스를 불러오기

 

def add_two(num: int):
    return num + 2   

def multiply_by_two(num: int):
    return num * 2 

a = 5 

Solution

utis.py에 __all__에 넣으면 된다!

__all__ = ["add_two", "multiply_by_two"]

def add_two(num: int):
    return num + 2   

def multiply_by_two(num: int):
    return num * 2 

a = 5 

 

from utils import *

num = 3 
print(add_two(num))
print(multiply_by_two(num))
print(a)
5
6
Traceback (most recent call last):
  File "main.py", line 6, in <module>
    print(a)
NameError: name 'a' is not defined

 

이렇게 하면, a는 무시가 되고, 원하는 것만 할 수 있다 __all__!

 


2. Combine Multiple Files

Scenario

아래와 같은 directory를 가졌다고 가정해보자.

.
├── data_modules
│ ├── load_data.py
│ └── process_data.py
└── main.py

 

In load_data.py

class DataLoader:
    def __init__(self, data_dir: str):
        self.data_dir = data_dir

    def load_data(self):
        print(f"Loading data from {self.data_dir}")

In process_data.py

class DataProcessor: 
    def __init__(self, data_name: str):
        self.data_name = data_name
    
    def process_data(self):
        print(f"Processing {self.data_name}")

2개의 다른 파일들로부터 클래스를 사용하기 위해서는 각각의 파일에서 각각의 클래스를 import 했어야 함

from data_modules.load_data import DataLoader
from data_modules.process_data import DataProcessor

data_loader = DataLoader('data/')
data_loader.load_data()

data_processor = DataProcessor('data1')
data_processor.process_data()

이 방법이 일반적이지만, 아래처럼 한꺼번에 하는 방법이 없을까?!

from data_modules import DataLoader, DataProcessor

Solution

__init__. py에 넣는 것이다! 

 

in __init__.py 

from .load_data import DataLoader
from .process_data import DataProcessor

위와 같이 init 파일에 2개를 넣어 놓는다.

여기서. 을 사용하는 이유는 같은 디렉터리에 있는 load_data.py나 process_data.py를 사용하기 때문이다.

 

from data_modules import DataLoader, DataProcessor

data_loader = DataLoader('data/')
data_loader.load_data()

data_processor = DataProcessor('data1')
data_processor.process_data()

3.Run a Directory like a Main Script

Scenario

아래와 같은 디렉토르는 다음과 같음.

.
└── data_modules
├── __init__. py
├── load_data.py
├── main.py
└── process_data.py

 

작동시키려면 다음과 같이 해야 한다.

 python data_modules/main.py

사용자 또는 팀원이 단순히 상위 디렉터리를 실행하여 코드 main.py 파일을 실행하는 것을 더 간단하게 만들고 싶을 수 있다.

python data_modules

이렇게 하면 python data_modules/main.py로 하는 것보다 나을 수 있다.

왜냐하면 더 짧기 때문에 ㅎ?

그래서 사용자는 특정 폴더에서 특정 파일을 알 필요가 없어진다!

Solution

이것은 __main__. py가 유용 할 때입니다. 최상위 디렉토리를 실행할 때 실행하려는 스크립트를 __main__.py로 변경하기 만하면됩니다. 이 예에서 main.py는 __main__.py가 된다.

# Rename main.py to __main__.py
mv data_modules/main.py data_modules/__main__.py

 

이렇게 바뀐다!

.
└── data_modules
├── __init__. py
├── load_data.py
├── __main__. py
└── process_data.py

 

끝!

python data_modules

 

굉장히 아주 좋은 것을 배운 글이었다. 

정리한 것을 보면 다음과 같다.

 

  • Controlling what to import when using import *
  • Shortening your import statements
  • Running the top-level directory as the main script

신기한 글 (패키지 만드는 법)

towardsdatascience.com/how-to-effortlessly-publish-your-python-package-to-pypi-using-p oetry-44b305362f9f 

 

How to Effortlessly Publish your Python Package to PyPI Using Poetry

Share your Useful Python Utilities in 10 Minutes

towardsdatascience.com

신기한 글(tree 만들기)

towardsdatascience.com/rich-generate-rich-and-beautiful-text-in-the-terminal-with-pyth on-541f39abf32e

 

Rich: Generate Rich and Beautiful Text in the Terminal with Python

Debug and Create Cool Python Packages in a Few Lines of Code

towardsdatascience.com

 

 
728x90