루트 권한 없이 Python 모듈 설치하기
서버나 공유 환경에서 작업하다 보면 관리자(root) 권한이 없어 pip로 패키지를 시스템 디렉터리에 설치하지 못하는 경우가 자주 발생합니다. 이럴 때에도 두 가지 방법으로 문제를 해결할 수 있습니다. 첫 번째는 모듈 파일을 별도의 디렉터리에 저장한 뒤 해당 경로를 Python의 검색 경로에 추가하는 것이고, 두 번째는 virtualenv를 사용해 격리된 로컬 환경을 만드는 것입니다.
1. sys.path에 사용자 지정 경로 추가하기
모듈 파일을 원하는 디렉터리(예: AdditionalModules/)에 저장한 후, 아래 코드처럼 sys.path에 해당 경로를 추가하면 Python이 그 디렉터리에서도 모듈을 찾아 임포트할 수 있습니다.
>>> import os, sys
>>> file_path = 'AdditionalModules/'
>>> sys.path.append(os.path.dirname(file_path))
>>> # PYTHONPATH에 경로가 등록되었으므로,
>>> # 이제 Python은 AdditionalModules 폴더에서도 모듈을 검색합니다.
이 방법은 간단하지만, 프로젝트마다 매번 경로를 직접 관리해야 한다는 점에서 번거로울 수 있습니다.
2. virtualenv로 격리된 가상 환경 구성하기
더 체계적인 방법은 virtualenv를 사용해 독립적인 로컬 Python 환경을 만드는 것입니다. virtualenv가 해결하는 근본적인 문제는 의존성과 버전 충돌이며, 그와 동시에 설치 권한 문제도 간접적으로 해결해 줍니다.
예를 들어 어떤 애플리케이션은 LibFoo의 버전 1이 필요하고, 다른 애플리케이션은 버전 2가 필요하다고 가정해 봅시다. 모든 패키지를 /usr/lib/python2.7/site-packages(또는 플랫폼별 표준 위치)에 설치하면, 업그레이드하면 안 되는 애플리케이션까지 의도치 않게 함께 업그레이드되는 상황이 쉽게 발생합니다.
virtualenv를 사용하면 프로젝트별로 패키지가 분리된 전용 환경이 생성되므로, 시스템 전역 디렉터리에 쓰기 권한이 없어도 각 프로젝트에 필요한 패키지를 자유롭게 설치하고 관리할 수 있습니다. 즉, 권한이 없는 머신에서도 패키지 설치가 가능해집니다.
virtualenv에 대한 자세한 내용은 공식 문서(https://virtualenv.pypa.io/en/stable/)를 참고하세요.