没想到已经两个多月没更新了,今天分享一下最近自己处理的Python包管理的一个实例,全程菜鸡视角
,非常适合没什么基础的人阅读。
因为实验需要,我想用一个叫做sematch的包来计算中文词汇的语义相关性,这个包是需要Python 2.7支持的,而我的Mac自带的Python版本就是2.7,此外我自己还安装过Anaconda 3(Anacoanda是Python的发行版,包括Python本身和其他集成的一些库和工具),但我更习惯用Pycharm做编译器。
所以我就先用Pycharm创建一个project,这里和我记忆中不太一样了(太久没用了,hhhh),可以选择用什么工具来创建环境。我之前是知道Python可以为不同的project各自创建虚拟环境,这样所需的版本依赖可以互不干扰,这里发现可以用不同的工具来创建环境,虚拟环境是用Virtualenv来创建和管理的,或者还可以用conda来创建,所用工具和管理思路有区别,具体差异就不细讲了。此外,还可以选择在这个环境中使用的Python版本。
进入环境之后发现,Pycharm的功能还挺强大,可以在属性偏好里看到Project interpreter,在左下角可以直接通过+和-来安装和卸载第三方库。
不过我在尝试的时候,这个功能间歇性抽风,有几次不能安装成功,建议我还是通过pip来安装,就很迷。不过Pycharm是自带一个terminal窗口的,不用去打开系统的终端,而且因为已经在Pycharm中打开了对应的project,所以不需要再去激活这个虚拟环境。因为如果是在系统的终端中,电脑上有很多个版本的Python,有多个项目及其虚拟环境,所以要先激活对应的虚拟环境。这个操作的逻辑其实也很简单,在虚拟环境的文件中,有一个名为activate的文件,这一步本质就是在终端中把这个文件运行一下。
这里我必须承认一点,我执行成功的是用Virtualenv创建的虚拟环境,而在conda环境中,我无论是用pip还是conda都显示无法识别命令,但是由于另一种情况成功了,我就没再细究,也许上述内容在conda环境下有些步骤是不一样的。
在安装sematch成功之后,我开心地找到一个demo准备运行,结果报错了
悲伤到我忘了截图,只能大概用文字给大家描述一下错误,总之经过搜索,这个问题的本质是由于sematch的有一个依赖包是nltk,而这个包已经不支持Python 2了,令人窒息!要解决这个问题,要么我在所有出现print函数的module的开始都加上一句from future import print_function(大概是这个样子,实际不记得了),要么重新安装一个旧版本的nltk(提前剧透,这是最终成功的一个方案
)。
这里插播一个另外尝试的方案,我一直没有放弃用anaconda 3,在sematch的github中看到一条issue说python 3里也可以用,但是用刚刚说的直接添加和pip的方法都没有用,倒是可以从github下载,但是被无情拒绝,具体原因也不记得了,因为另一个方案的成功,这个问题同样也没有细究。
所以回到安装旧版本的nltk这个方案上,这个其实可以先把已有的版本通过减号删掉,然后用“+”安装,还可以选择安装的版本。重新安装之后再运行之前的demo,那个问题解决了,但是出现了新的问题,我心态真的崩了,用最后的倔强去搜了一下对应的问题,合理猜测是需要用到某个语料库,但是不知道为啥这个旧版本的nltk没有下载,所以我到这个语料库的网站去把所需要的几个库给下载到本地了,这一次终于成功了,激动地想哭。
又到了尴尬的结尾部分,每次我都不知道该如何总结,这次就强行鸡汤一下吧。世上无难事,只要肯放弃。