티스토리 뷰

가상환경 site-packages에 설치된 라이브러리 수정해서 사용하는 방법

몇 년 전, 팀원들과 함께 파일럿으로 구현한 Python 기반 서비스를 다른 서버로 이관하는 과정에서 예상치 못한 문제가 발생했습니다. 가상환경의 site-packages에 설치된 라이브러리의 .py 파일을 직접 수정한 상태였고, 이 상태로 requirements.txt를 이용해 새로운 서버에 라이브러리를 설치하자, 동일한 환경임에도 오류가 발생한 것입니다. 이 경험을 통해 깨달은 것은, 설치된 라이브러리를 직접 수정하는 방식은 이식성과 유지보수 측면에서 매우 취약하다는 점이었습니다.

실제로 프로젝트를 진행하다 보면 외부 라이브러리의 기능이 100% 만족스럽지 않아, 약간의 수정을 가하고 싶을 때가 있습니다. 하지만 site-packages 내 코드를 직접 수정하는 방식은 위험할 뿐만 아니라, 향후 업데이트나 서버 이전 시에도 문제가 발생할 수 있습니다. 이럴 때는, 상속을 통해 원하는 기능만 안전하게 덮어씌우는 방식이 훨씬 더 효과적이고 유지보수에도 유리합니다.


 

🔍 1. 라이브러리 소스 코드 위치 확인하기

우선 수정하고 싶은 클래스나 함수가 어디 정의되어 있는지 찾아야 합니다.

# 예시: pandas 설치 경로 찾기
python -c "import pandas; print(pandas.__file__)"
 
출력 예시:
/path/to/venv/lib/python3.x/site-packages/pandas/__init__.py

 

이 경로를 통해 실제 코드를 열어보면서 어떤 클래스를 상속받을지 파악합니다.

 

 

🧬 2. 원하는 클래스를 상속하기

예를 들어 SomeLibrary라는 라이브러리에 있는 SomeClass의 기능 중 greet() 메서드만 바꾸고 싶다고 가정합니다.

# 원본 라이브러리 코드 예시 
class SomeClass: 
	def greet(self): 
    	print("Hello from the original class!")

 

이 클래스를 상속해서 원하는 부분만 바꿔보겠습니다.

 

 

 

✍️ 3. 사용자 정의 클래스 작성하기

# my_custom_module.py 
from some_library import SomeClass 

class MyCustomClass(SomeClass): 
	def greet(self): 
    	print("Hello from my customized class!")

 

이제 기존 코드 대신 MyCustomClass를 사용하면 됩니다.

# main.py
from my_custom_module import MyCustomClass

obj = MyCustomClass()
obj.greet()     # 출력: Hello from my customized class!

 

 

 

🗂️ 4. 많이 수정할 땐 전체 복사하여 수정

라이브러리를 크게 수정해야 한다면, 해당 디렉토리를 통째로 복사해서 프로젝트 내 디렉토리에 넣고 사용하는 방법도 있습니다.

#라이브러리 복사
cp -r venv/lib/python3.x/site-packages/some_library/ your_project/custom_lib/

 

그리고 PYTHONPATH sys.path를 이용해 이 디렉토리를 우선적으로 참조하도록 설정합니다.

 

1) VSCode 등 IDE에서 PYTHONPATH 설정

.env 파일 또는 런타임 설정에 다음 추가:

PYTHONPATH=/your_project/custom_lib

 

2) sys.path로 코드에서 직접 지정

스크립트 또는 main.py 맨 위에 다음과 같이 명시적으로 경로를 추가합니다:

import sys import os sys.path.insert(0, os.path.abspath("custom_libs")) # 프로젝트 루트 기준 상대경로
 

 


 

⚠️ 정리 및 고려사항

 

항목 설명
❌ 직접 수정 site-packages를 직접 수정하면 업데이트 시 덮어씌워짐
✅ 상속 방식 필요한 기능만 오버라이딩하는 것이 안전하고 명확
❗ C-extension 주의 Pandas, NumPy처럼 C 기반 라이브러리는 상속이나 수정이 어려움

 


 

✅ 마무리

라이브러리를 상속해서 커스터마이징하는 방법은 Python의 강력한 객체지향 기능을 잘 활용하는 대표적인 방식입니다.
회고를 위해 간단한 예시로 포스팅을 작성하였고 이후에는 실전 코드기반의 예시를 작성해 볼 예정입니다.

 


 

'IT Lab > Devopment' 카테고리의 다른 글

[Java] WAR 와 JAR 배포 비교  (0) 2025.05.31
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/08   »
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
글 보관함