Python 플러그인을 개발 중이며 대상은 'elevation'이라는 PyPI Python 라이브러리의 기능을 QGIS에 통합하고 있습니다.
외부 Python 라이브러리를 설치하고 Python 플러그인에서 사용할 수있게하는 OS 독립적 인 방법이 있습니까?
외부 파이썬 의존성을 설치하기위한 다른 시스템 특정 절차를 이미 알고 있습니다. 내가하고 싶은 일은 사람들을 미치게하지 않고 다른 환경에 플러그인을 배포하는 것입니다.
내가 이미 알고있는 것
웹 및 기타 유사한 질문을 검색하면 OS 독립적 인 솔루션이없는 것 같습니다.
Windows 사용자
Python은 QGIS 패키지에 패키지되어 배포되므로 외부 Python 라이브러리를 설치하려면 OSGeo4W Shell을 통해 거기서 pip를 사용해야합니다.
관련된 링크들:
- QGIS 독립형 및 Python 모듈
- OSGeo4W Python에 Python 설정 도구 설치
- Windows에서 QGIS 용 타사 Python 라이브러리를 설치하는 방법은 무엇입니까?
OS X 사용자
이 경우 QGIS는 OS X에 사전 패키지되어 다음 위치에있는 내장 Python을 사용합니다.
/usr/bin/python
여기서 문제는 기본 설치된 pip에는 몇 가지 제한이 있으며 너무 많은 권한이 필요하다는 것입니다.
빠른 해결 방법은 home-brew를 사용하여 Python을 설치하여 pip가 사용자가 수정 가능한 Python 프레임 워크에 대해 실행할 수 있도록하는 것입니다. 이 방법에 대한 자세한 내용은 여기를 참조 하십시오 .
pip를 통해 모든 Python 라이브러리를 설치 한 후에는 디렉토리를 PATH 변수에 추가하면됩니다.
OS X 사용자를위한 대체 방법
플러그인 Python 코드 내에서 시스템이 제공하는 pip를 사용하여 필요한 패키지를 설치할 수 있습니다. 그런 다음 방금 설치 한 패키지를 경로에 추가하여 연결할 수 있도록 할 수 있습니다.
import sys
import pip
pip.main(['install','--target=/Devel/test', 'elevation'])
sys.path.append("/Devel/test")
수제이지만 작동하는 솔루션 (Linux 및 OS X 모두에서 테스트)
라이브러리 업데이트와 유지 관리를 플러그인과 분리하여 유지할 수 있기 때문에 다른 방법으로 가기로 결정했습니다. 새로운 사용자가 플러그인을 설치할 때마다 최신 버전의 고도 라이브러리가 플러그인의 하위 디렉토리에 pip에 의해 직접 다운로드되어 설치됩니다.
self.plugin_dir = os.path.dirname(__file__)
self.elevation_dir = os.path.join(self.plugin_dir, 'elevation')
# Checking the presence of elevation library
try:
import elevation
except:
pip.main(['install', '--target=%s' % self.elevation_dir, 'elevation'])
if self.elevation_dir not in sys.path:
sys.path.append(self.elevation_dir)