是否有一种独立于操作系统的方式来安装外部Python库并使之可用于Python插件?
我已经知道用于安装外部Python依赖项的不同系统特定过程,我想做的就是在不同的环境中分发我的插件而不会让人发疯。
/>
我已经知道的
搜索网络和其他类似问题似乎没有独立于操作系统的解决方案。
Windows用户
Python打包并分发到QGIS软件包中,因此,要安装外部Python库,您必须先经过OSGeo4W Shell并从那里使用pip。 />
QGIS独立模块和Python模块
在OSGeo4W Python中安装Python setuptools
如何安装第三方Windows上用于QGIS的python库?
OS X用户
在这种情况下,QGIS使用预包装在OS X内且位于以下位置的内置Python:
/usr/bin/python
这里的问题是默认安装的pip有一些限制,并且需要太多特权。
一种快速的解决方法是使用自制软件进行安装Python,以便您的pip可以在用户可修改的Python框架上运行。在此处查看此方法的详细信息。
通过pip安装所有Python库后,只需将它们的目录添加到PATH变量中。 >在插件Python代码内部,您可以使用系统提供的pip来安装所需的软件包。然后,您可以使刚刚安装的软件包可访问并将其添加到路径中。 br />我决定采用另一种方法,因为它允许将库的更新和维护与插件分开。每次有新用户安装插件时,pip都会直接下载并安装最新版本的海拔库,并在插件的子目录中进行安装。
import sys
import pip
pip.main(['install','--target=/Devel/test', 'elevation'])
sys.path.append("/Devel/test")
#1 楼
对于插件用户而言,最方便的解决方案是将轮子捆绑在插件内部。下载wheel,将其放在您的插件文件夹中,然后从那里导入。try:
import elevation
except ImportError:
import sys
import os
this_dir = os.path.dirname(os.path.realpath(__file__))
path = os.path.join(this_dir, 'elevation-x.y.z-py2.py3-none-any.whl')
sys.path.append(path)
import elevation
评论
我不知道轮文件是可导入的。谢谢。 +1
–库布拉·努尔(KübraNur)
20-09-16在12:44
#2 楼
这对我有用(在def run(self)中): def load_libraries(self):
import_path = os.path.join(self.plugin_dir, 'lib/python2.7/site-packages')
sys.path.insert(0, import_path)
并设置虚拟环境。
在Windows中似乎一个不同的故事。我在安装matplotlib时遇到问题。
#3 楼
我遇到了这个问题,无法在QGIS中运行Python脚本,该脚本依赖于外部Python库。最直接的解决方案是安装命令行附带的Boundless Desktop并安装自己的python。使用命令行,您可以运行和安装(使用pip)任何外部python软件包。#4 楼
我最近在一个项目上做了一些工作。不幸的是,确实没有实现这一目标的好方法。您的解决方案与我提出的解决方案非常相似,但是并不能保证用户甚至已经安装了pip。我最终获得了一份get_pip.py副本并使用execfile()在其中运行
类似于最终解决方案:
self.plugin_dir = os.path.dirname(__file__)
try:
import pip
except:
execfile(os.path.join(self.plugin_dir, get_pip.py))
import pip
# just in case the included version is old
pip.main(['install','--upgrade','pip'])
try:
import somelibrary
except:
pip.main(['install', 'somelibrary'])
当然,另一种选择是包括库本身在您插件的目录中。您可能会冒险提供旧版本,但是从理论上讲这并不重要。
#5 楼
也许您可以尝试virtualenv安装外部依赖项。这样,您不必担心系统环境。https://www.fullstackpython.com/application-dependencies.html
#6 楼
当QGIS在Linux系统上使用预安装的python时,您可以执行sudo pip install <package>
,但这会使默认设置混乱。您的/home/<user>/QGIS/venv
与往常一样。接下来要做的就是在脚本内部添加以下行,然后导入<package>
:import_path = os.path.join('/home/<user>/QGIS/venv/lib/python3.7/site-packages')
sys.path.insert(0, import_path)
import <package>
现在将找到已安装的
<package>
。
评论
此过程仅适用于Windows,因为Unix OS(Linux,Mac OS X)使用已安装的标准Python版本。我知道,我在“丰富”我的问题,现在有一个OS X用户部分,介绍了如何在Mac上进行操作。
您可以在Apple Python中完美安装pip。 QGIS使用此版本,而不使用其他版本(Homebrew,Anaconda和其他版本)。如果要使用Homebrew Python,则需要安装Qbr的Homebrew版本。
还看看插件的依赖关系,一个点子安装插件可能吗?第一:Osgeo4w Shell有什么区别?和QGIS列表中的许多其他帖子
如果它是纯python库,则可以将带有插件的第三方库作为子包/模块进行分发。