원격으로 파이썬 모듈을 임포트하는 방법
파이썬에서는 모듈을 원격지에서 직접 가져와(import) 사용하는 방법이 존재합니다. 다만 이 방식은 애플리케이션의 실행 속도를 느리게 만들 수 있어 일반적으로는 권장되지 않습니다. 원격 모듈 임포트를 구현하려면 knockout이라는 모듈을 활용할 수 있습니다.
knockout 설치하기
먼저 pip를 사용해 knockout을 설치합니다.
$ pip install knockout
원격 모듈 임포트 사용법
설치가 완료되면 아래와 같이 knockout을 사용해 원격 모듈 임포트 기능을 활성화할 수 있습니다.
>>> from knockout import urlimport >>> urlimport.register() Url importing enabled. Add urls to sys.path.
임포트에 사용할 수 있는 유효한 URL 형식은 다음과 같습니다.
https://example.com/path/to/repository/#packagename
주의사항
이 기능은 실험적(experimental) 성격이 강하므로, 사용 과정에서 발생하는 모든 위험은 개발자 본인이 감수해야 합니다.
실제 사용 예시
다음은 BeautifulSoup 라이브러리를 원격 URL에서 직접 임포트하는 예시입니다.
>>> import sys >>> sys.path.insert(0, 'https://www.crummy.com/software/BeautifulSoup/download/3.x/BeautifulSoup-3.0.8/#BeautifulSoup') >>> import BeautifulSoup ... >>> BeautifulSoup <module 'BeautifulSoup' from 'https://www.crummy.com/software/BeautifulSoup/download/3.x/BeautifulSoup-3.0.8/BeautifulSoup.py'>
대안 1: sys.path를 활용한 로컬 디렉터리 추가
서버에 충분한 권한이 없어 패키지를 설치할 수 없는 경우라면 몇 가지 대안이 있습니다. 첫 번째 방법은 모듈 파일들을 별도의 디렉터리에 저장한 뒤, 해당 경로를 sys.path에 추가해 파이썬이 그 폴더에서도 모듈을 검색하도록 만드는 것입니다.
>>> import os, sys >>> file_path = 'AdditionalModules/' >>> sys.path.append(os.path.dirname(file_path)) >>> # PYTHONPATH에 경로가 등록되었으므로, 이제 파이썬은 AdditionalModules 폴더에서도 모듈을 찾습니다.
대안 2: virtualenv로 격리된 환경 구축
두 번째 방법은 virtualenv를 사용해 격리된 로컬 파이썬 환경을 만드는 것입니다. virtualenv가 해결하고자 하는 근본적인 문제는 의존성(dependency)과 버전 관리이며, 간접적으로는 권한 문제이기도 합니다.
예를 들어 한 애플리케이션은 LibFoo 버전 1이 필요하고, 또 다른 애플리케이션은 버전 2가 필요하다고 가정해 보겠습니다. 이런 경우 두 애플리케이션을 어떻게 함께 사용할 수 있을까요? 모든 패키지를 /usr/lib/python2.7/site-packages(또는 운영체제별 표준 설치 위치)에 설치하면, 업그레이드하면 안 되는 애플리케이션을 의도치 않게 함께 업그레이드해버리는 상황이 쉽게 발생합니다.
이러한 특성 덕분에 virtualenv는 설치 권한이 없어 서버에 패키지를 직접 설치할 수 없는 상황에서도 매우 유용하게 활용됩니다. 더 자세한 내용은 공식 문서를 참고하세요.
virtualenv 공식 문서 바로가기