过程
整个解决过程很漫长……花了我三天时间,遇到了各种报错,尝试了各种办法……如果不愿看可直接跳到后面的总结。
首先尝试直接用pip install pymc:
这里不太确定是什么问题,就换了个安装方式,从这个网站https://pypi.org/project/pymc/4.4.0/#files中下载Distribution文件:
然后尝试通过tar.gz或whl文件安装:
pip install E:\Downloads\pymc-4.4.0.tar.gz
还是报错:这里看起来像是SSLError,可能setuptools也有问题
查找SSLError解决办法,需要加一个–trusted-host,因为开了梯子,加了下面这个
–trusted-host pypi.org --trusted-host files.pythonhosted.org
还是报错:这次好像是ProxyError,可能是代理问题
然后把梯子关了再跑一遍,直接下载失败,老长一串Exception报错:
可能还是网络的问题,但还是先检查了一下pip setuptools wheel:
py -m pip install --upgrade pip setuptools wheel
不开梯子跑会很长一串Exception,最后显示ReadTimeoutError,开着梯子跑就会出现SSLError,加上–trust-host又出现ProxyError,于是干脆把梯子关了改成国内镜像:
py -m pip install --upgrade pip setuptools wheel -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
这里将pip源换成清华源、阿里源等都适用。
这时可以成功下载最新版的pip setuptools和wheel了,也Successfully uninstalled旧版本的了,但安装新版本的时候又报了一长串错,最后显示:
ValueError: Unable to find resource t64.exe in package pip._vendor.distlib
在网上搜索解决办法,说是先卸载setuptools:
python -m pip uninstall pip setuptools
再重新安装setuptools
pip install --upgrade setuptools
但这里我直接用这个命令更新还是会报错ReadTimeoutError,所以我还是在后面加了国内镜像源,然后pip就成功更新到最新版本:
然后重新尝试安装pymc,直接安装还是报错ReadTimeoutError:
还是加上豆瓣源,这次跑得挺顺利的,但最后又报错:
ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问。: ‘C:\Users\Dalia\AppData\Local\Programs\Python\Python39\Lib\site-packages\~umpy\.libs\libopenblas.NOIJJG62EMASZI6NYURL6JBKM4EVBGM7.gfortran-win_amd64.dll’
Consider using the--user
option or check the permissions.
这应该是权限问题,在原命令的install后面加–user重新试,又报错:
ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.
matplotlib>=3.5 from http://pypi.doubanio.com/packages/78/af/4c83c99656c500ca0db7fe6f349d6309372ea8bad9c78d5c161930977bfd/matplotlib-3.6.2-cp39-cp39-win_amd64.whl#sha256=5ba73aa3aca35d2981e0b31230d58abb7b5d7ca104e543ae49709208d8ce706a (from arviz>=0.13.0->pymc==4.4.0):
Expected sha256 5ba73aa3aca35d2981e0b31230d58abb7b5d7ca104e543ae49709208d8ce706a
Got e59b8be8f73ae3324e5b768fd21dd204ffdbcf0af58e1e74f04be926908027a6
在网上查找后说可能是网速问题,多试几遍,就又跑了一遍,又报了个新错误,是一个没有添加Path的警告和packages版本不兼容问题:
然后根据警告在Path中添加了路径,重新cmd打开命令再运行一遍,就发现已经安装好了?:
但是!去python中import的时候会报错:
import numpy as np
import matplotlib.pyplot as plt
from IPython import display
import pymc as pm
import aesara.tensor as at
import aesara
在cmd中import也有问题:
尝试改了numpy的版本,发现会和tensorflow等其他packages不兼容,所幸先不管其他packages了,这里应该是aesara包有问题,重新安装了pymc的4.1.0版本,import也是同样的报错,如果解决了再来更新……
更新:继续来debugg
尝试重新安装aesara包,去官网搜索安装方法,把官网仔细阅读并各种test后最终选择在github上下载code.zip,然后进入目录安装,这个时候重新运行import已经可以正常运行了,但其实还是会有警告,用官网的test方法还是有点问题。
不过还是先把代码跑通。
pm.model_to_graphviz(basic_model)
跑代码的时候这里报错了,然后去重新下载这个python-graphviz包,还是类似的命令:
pip install graphviz -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
但还是报错:
ExecutableNotFound: failed to execute WindowsPath(‘dot’), make sure the Graphviz executables are on your systems’ PATH
查找解决办法是在开头引用的时候加上
import os
os.environ["PATH"] += os.pathsep + 'D:/Program Files (x86)/Graphviz2.38/bin/'
然后就没有报错了
然后开始用pymc sample,代码是:
with basic_model:
trace = pm.sample(draws = 1000, tune = 1000, return_inferencedata=True)
但还是报错:
TypeError: cannot pickle ‘fortran’ object
查找解决办法是:在sample里面加上设定 cores=1,再运行就成功了。
总结
安装PyMC
用pip安装Pymc,去PyMC官网下载tar.gz或whl文件。
在确保pip setuptools wheel正常的情况下,直接在cmd里输入命令:
pip install --user D:\pymc.whl -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
这里D:\pymc.whl换成自己下载的whl文件所在目录。
如果运行python代码时import pymc报错,根据报错内容,可能是aesara包的问题,可以去aesara官网查找test方法,检查错误原因,或者通过git重新安装aesara包,这里我是根据test时的报错安装了一个hypothesis库,但其实test还是有些问题,我没查到如何解决,先直接运行代码了。
运行时的问题
pm.model_to_graphviz(basic_model)
如果这个函数运行时报错,可能时pygraphviz的问题,重新安装pygraphviz包:
pip install graphviz -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
并且在代码开头加上path设置(如果不报错也可以不加):
import os
os.environ["PATH"] += os.pathsep + 'D:/Program Files (x86)/Graphviz2.38/bin/'
- 如果pm.sample()报错,试试在里面设置 cores=1
暂时就这些报错问题和解决办法。