改了很久才import成功。期间查了不少东西,虽然大部分没用上,但还是记录一下。
PCRaster的安装和个人的最终解决方法
Software for environmental modelling | PCRaster
官网推荐新创建一个虚拟环境运行。看到conda于是打开prompt。
conda create --name pcraster -c conda-forge python pcraster spyder matplotlib
第一个pcraster是环境名称,python及以后是该虚拟环境下想要install的包,可以自行添加或者设定version(如下)。另pcraster应该是只在conda上发布了,因为使用pip(pypi)无法安装。没有尝试去掉-c,因此不知清华镜像是否有。
conda create --name pcraster37 -c conda-forge python==3.7 pcraster==4.3.0 matplotlib gdal
尝试在prompt里import。成功。
尝试在jupyter/spyder里import。失败。报错:
The ‘Microsoft Visual C++ Redistributable for Visual Studio 2017‘ is required to run PCRaster, available at:
https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads
DLL load failed: 找不到指定的程序。
In case you cannot solve the issue please consult the PCRaster mailing list at:
https://lists.geo.uu.nl/mailman/listinfo/pcraster-info
安装PyCharm。将anaconda里的虚拟环境pcraster37配置给Charm。尝试在PyCharm里import。成功。
关于Microsoft Visual C++ Redistributable和Visual Studio
可以粗暴地把Redistributable理解成一套dll配置。64位安x64,32位安x86。
上文报错中提供的地址可以下载微软推荐的2015-2019合体等效包。2015、2017、2019单独的要另行搜索。
2015、2017、2015-2019三种包互相不兼容。2019没试过。
Visual Studio Community安装。注意在pc已有Anaconda的情况下,安装Visual Studio时勾选安装conda或python相关的复选框需谨慎。Visual Studio有修改环境变量的操作,Anaconda相关变量可能会在此过程被他修改。另外用户目录下的.jupyter的虚拟环境路径清单只保留了路径,而没有命名,因此最坏的结果是conda下的所有虚拟环境都只剩下了路径而丢失了虚拟环境的命名。
import error: DLL load failed
这个事情有关path与乱七八糟的DLL,还有python的各种IDE。
有很多外国人写了类似《python如何找到你下的包》的东西,知乎也有很多,不赘述。
总结一下我用了的操作,凭感觉排了个序:
① 在cmd/prompt/env中运行python,看是否能import成功。不能,则转到②;能,则转到⑤。
② 添加*,*/Library/bin和*/Scripts。临时补救用sys.path.add(),长期使用则把路径添加到PATH。一般直接加到PATH里。
③ 考虑使用老版本(典型事例TensorFlow2.0)。
④ 如果你头铁,那么可以学程序员debug。下一节pyd文件与dll里或许有可以帮忙的,或许没有。
⑤ 分别查看cmd界面里的和你用的IDE里的sys.executable和sys.path的结果。executable不同则一般来说path也不同,需要你再去搜索如何同核启动;如果奇葩地出现了executable相同但path不同的情况,那么就手动改一下path;如果两者都相同,我没有搜索到解决方法,所以直接换了IDE。
pyd文件与dll
21 try:
22 from ._pcraster import *
23 except ImportError as error:
ImportError: DLL load failed: 找不到指定的程序。
_pcraster是一个pyd文件。在第19行有备注:# Check if we can import our compiled module
搜索到Dependency Walker软件可以用于查看各种文件的依赖关系:Dependency Walker使用说明 - 古立 - 博客园 (cnblogs.com)
Dependency Walker使用注意事项:① 2005年即停止更新的软件,界面怀旧运行慢;② 一些dll不是单独的,而是形成一个系列,一系列各成分齐全就可以正常运行,而Dependency Walker系列中缺失了一个就会像你报错,例如Windows API Sets,这部分的缺失报告可以无视。
可根据Dependency Walker查到的缺失dll来添加path。