我正在开发一个Python插件,目标是将称为“海拔”的PyPI Python库的功能集成到QGIS中。
有没有一种独立于操作系统的方式来安装外部Python库并使它们可用于Python插件?
我已经知道用于安装外部Python依赖项的不同系统特定过程,我想做的就是在不同环境中分布我的插件而不会让人发疯。
我已经知道的
搜索网络和其他类似问题,似乎没有独立于操作系统的解决方案。
Windows用户
Python打包并分发在QGIS软件包中,因此,要安装外部Python库,您必须先经过OSGeo4W Shell,然后从那里使用pip。
相关链接:
OS X用户
在这种情况下,QGIS使用内置的Python,它预先包装在OS X内,位于:
/usr/bin/python
这里的问题是,默认安装的pip有一些限制,并且需要太多特权。
一种快速的解决方法是使用自制软件安装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)