win10 配置pylucene
参考文章
http://lxsay.com/archives/269
Windows 10 64 Bit 编译安装 PyLucene 6.2, 6.4 或 6.5
update 2017.07: 添加了对 Python 3 的支持
这可能是互联网上第一篇详细介绍 Windows 下安装新版本 Pylucene 的文章。PyLucene 4 以下原本都有提供 windows 下的安装包,但是新版本没有了。
网上那些说 Pylucene 在 Windows 系统上只能装 32 位版本的文章,纯属以讹传讹。
本文允许带修改的转载,但转载时请注明原文出处: lxsay.com
本文也适用于 32 位的 Windows 系统,只要把安装的软件都改成 32 位的版本就可以了
前提条件:
- 安装 python ( 本文以 Python 2.7.13 为例,Python 3 也可以 ) 环境(推荐 Anaconda,自带 gensim, numpy, scipy 等在 Windows 下比较难安装的库).
- 安装 JDK 1.8 ( 64 位版本) 并配置环境变量 (推荐按照这篇文章操作:http://www.cnblogs.com/shinge/p/5500002.html),并且配置JRE的环境变量(将 JAVA_HOME/jre/bin/server 这个路径也加进 path 环境变量)
- 安装 VC for Python 2.7 ( www.microsoft.com/en-hk/download/details.aspx?id=44266 )。如果是 Python 3,安装 Visual C++ 2015 Build Tools (http://landinghub.visualstudio.com/visual-cpp-build-tools)
步骤1. 安装 Apache Ant 并配置环境变量(在 path 环境变量中添加 Ant 安装主目录下的 bin 目录路径,和后面配置的 ant 可执行文件路径不一样)
步骤2. 安装 cygwin 64 bit (用于在 windows 系统中执行 linux 的命令),安装时在选择 packages 的窗口将 “Devel” 项由 “Default” 改为 “Installed”。 并且配置 cygwin 64 的环境变量(在 path 环境变量中添加 cygwin 64 安装主目录下的 bin 目录路径),重启电脑使之生效
步骤3. 下载并解压 pylucene 的 源代码 (一般解压出来的文件夹叫作 pylucene-6.4.1 之类)
步骤4. 进入 pylucene 安装文件夹下的 JCC 文件夹,修改 setup.py文件, 在 CFLAGS 配置这里,在 'win32' 后面添加 "/bigobj" 这个参数,如下面所示
CFLAGS = {
'darwin': ['-fno-strict-aliasing', '-Wno-write-strings',
'-mmacosx-version-min=10.5'],
'ipod': ['-Wno-write-strings'],
'linux2': ['-fno-strict-aliasing', '-Wno-write-strings'],
'sunos5': ['-features=iddollar',
'-erroff=badargtypel2w,wbadinitl,wvarhidemem'],
'win32': ["/EHsc", "/D_CRT_SECURE_NO_WARNINGS","/bigobj"], # MSVC 9 (2008)
'mingw32': ['-fno-strict-aliasing', '-Wno-write-strings'],
'freebsd7': ['-fno-strict-aliasing', '-Wno-write-strings'],
}
如果不添加 "/bigobj" 参数, 在编译 pylucene 时会提示文件过大,编译器无法编译
update: 在 pylucene 6.5 中,这个问题已经被解决,不需要添加此参数
步骤5. 在命令行下进入 jcc 文件夹,输入 python setup.py build ,如果没有错误信息,继续输入 python setup.py install 安装 JCC 。重启电脑
步骤6. 进入 pylucene-6.2.0 文件夹(根据要安装的版本而定,比如 pylucene-6.4.1 之类),修改 Makefile文件
首先注释掉(通过在每行前面添加'#'符号) 这一段默认配置
# Mac OS X 10.12 (64-bit Python 2.7, Java 1.8)
PREFIX_PYTHON=/Users/vajda/apache/pylucene/_install
ANT=/Users/vajda/tmp/apache-ant-1.9.3/bin/ant
PYTHON=$(PREFIX_PYTHON)/bin/python
JCC=$(PYTHON) -m jcc.__main__ --shared --arch x86_64
NUM_FILES=8
然后插入
PREFIX_PYTHON=D:/Progra~2/Anaconda2
ANT=D:/apache-ant-1.9.7/bin/ant
JAVA_HOME=C:/Progra~1/Java/jdk1.8.0_101
PYTHON=$(PREFIX_PYTHON)/python.exe
#JCC=$(PYTHON) -m jcc --shared --find-jvm-dll
JCC=$(PYTHON) -m jcc
NUM_FILES=8
update: 在 pylucene 6.5 中 JCC 项不再接受 shared 参数,因此应该改为 JCC=$(PYTHON) -m jcc, 否则安装时会出错
其中 PREFIX_PYTHON 是 python 的安装主目录,如果你创建了一个新的 Anaconda 环境并在该环境下编译,请将 PREFIX_PYTHON 换成该环境的根目录 (一般是 Anaconda2/envs/环境名)
ANT 是 ant 的二进制可执行文件的路径(注意不是安装目录而是可执行文件路径)
NUM_FILES 参数用于指定中间文件的分割数, 使得编译器可以处理大的文件,但是如果修改为其他数值可能会引起错误。 因此最好的办法还是在前一步指定 vc的参数 "/bigobj"
另外需要注意的是,Makefile 不接受带有空格的路径,因此如果路径带有空格的话请用命令行使用的缩写路径(又叫做 dos path, 比如上面这段就采用了这种写法)
步骤7. 运行 make 进行编译(注意:如果之前没有安装并配置 cygwin64 的话,这一步会无法进行下去)
步骤8. 编译完成后运行 make test 进行测试,由于项目的一些 bug,有几个检测 PyLucene 异常抛出的测试不会通过,但并无大碍。
步骤9. 运行 make install 进行安装
常见问题:
1. 编译安装 JCC 时无法使用 MSVC 编译,python 总是自动用 gcc 进行编译:要改成用 visual studio c++ 编译的话,需要编辑 python安装主目录\Lib\distutils下的distutils.cfg文件,将文件内容修改为下面所示
[build]
compiler=msvc
[build_ext]
compiler=msvc
其实本质上就是修改 setuptools 的配置文件
第二种办法是运行 setup.py 文件安装时添加参数变为 python setup.py build --compiler=msvc 但是此方法在接下来编译安装 pylucene 时会失效,因为 make 无法指定 python 使用的 C/C++ 编译器
2. make test 给出 error 123: linux 下出错的原因在于 Lucene 的测试代码使用了旧版 python 的异常。将 test_Pylucene.py 中的 WindowsError 改为 OSError 就可以。 Windows 下出错的原因也是如此,但是涉及的文件比较多,改起来比较麻烦,所以直接忽略
3. make 时提示 from jcc import _jcc 找不到 dll:原因是找不到 jvm.dll,将包含 jvm.dll 的 JRE 目录路径加入 path 环境变量即可(如JRE\bin\server)。如果在编译安装 JCC 这一步之前没有设定好 JDK 的系统变量,也会出现这类错误。 建议设定环境变量后重启电脑一次。如果设定环境变量后仍出现这样的错误,可以修改 JCC 目录下的 setup.py 文件,将 'JAVAHOME' 修改为 JDK 的实际目录路径
4. 用 pylucene 6.2 和 6.4 建立的索引可以互相兼容 , 但 pylucene 4 建立的索引不能在 6.2 以上版本使用(需要使用 IndexUpdater 包处理)。程序代码也是,因为很多函数和定义在新版本中被移除了
遇到的问题有
在C:\Python27\Lib\site-packages\JCC-3.0-py2.7-win-amd64.egg\jcc\windows.py中
的add_jvm_dll_directory_to_path
找不到 jvm.dll
解决方法 :
将dll_path写死进去,
def add_jvm_dll_directory_to_path():
path = os.environ['Path'].split(os.pathsep)
dll_path = get_jvm_dll_directory()
dll_path='D:\programs\java\jdk1.8.0\jre\bin\server\jvm.dll'
if dll_path is not None:
path.append(dll_path)
os.environ['Path'] = os.pathsep.join(path)
return True
raise ValueError, "jvm.dll could not be found"
如上
遇到的另一个问题是
java.lang.ExceptionInInitializerError
Caused by: java.lang.RuntimeException: WARNING: Can not find lexical dictionary directory! This will cause unpredictable exceptions in your application! Please refer to the manual to download the dictionaries.
at org.apache.lucene.analysis.cn.smart.AnalyzerProfile.init(AnalyzerProfile.java:73)
解决方法参考:
http://blog.csdn.net/dsbatigol/article/details/14448151
原因是,在添加smartcn那个分词器时,相应配置没弄好
在Pylucene根目录下进入makefile,
找到这么一行
#JARS+=$(SMARTCN_JAR) # smart chinese analyzer
删掉这个#
找到
--exclude org.apache.lucene.sandbox.queries.regex.JakartaRegexpCapabilities \
在附近加入一句:
--exclude org.apache.lucene.analysis.cn.smart.AnalyzerProfile\
重新make和make install覆盖安装,搞定!
总结就是,碰到问题,要从错误分析,
win10 配置pylucene的更多相关文章
- win10配置Memcached及MVC5测试分布式缓存入门
win10配置Memcached: 1.安装包下载 2.解压后有: 3.以管理员省份运行cmd: 4.安装:输入cmd命令: E:/memcached-amd64/memcached.exe -d ...
- 专治编译器编辑器vscode中文乱码输出 win10 配置系统默认utf-8编码
VS Code输出会出现乱码,很多人都遇到过.这是因为VS Code内部用的是utf-8编码,cmd/Powershell是gbk编码.直接编译,会把“你好”输出成“浣犲ソ”.如果把cmd的活动代码页 ...
- win10配置java环境变量,解决javac不是内部或外部命令等问题
win10配置java环境变量,解决javac不是内部或外部命令等问题 https://www.cnblogs.com/qianji/p/6402690.html
- Win10配置ADB工具教程
1.在该网站下载adb工具 http://pcedu.pconline.com.cn/748/7481463.html 2. Win10怎么配置ADB环境?Win10怎么安装ADB工具?这想必是很多安 ...
- WIN10配置MongoDB
WIN10配置MongoDB 1. 下载 [MongoDB 官网下载链接](https://www.mongodb.com/download-center?jmp=nav#community) 2. ...
- win10 配置系统默认utf-8编码
win10 配置系统默认utf-8编码 系统 win10 配置系统默认utf-8编码 Windows系统默认字符编码为gbk编码,开发项目编码一般为UTF-8,在我们执行程序及进行程序编码过程中编码 ...
- win10 配置 hadoop-2.7.2
win10 配置 hadoop-2.7.2 1.下载 先在 http://acrchive.apache.org/dist/hadoop/common/hadoop-2.7.2/hadoop-2.7. ...
- win10配置 samba
一.先確認Linux中smb正確配置可以使用命令smbclient -L //localhost/ 二.win10配置1.打開win10對smb1.0/cifs檔共用支援2.本地群組原則編輯,修改如下 ...
- win10配置易用命令行
在 win10 下配置易用命令行 win10 相比 Linux 最大的短板之一是命令行. 这篇文章不会将 win10 配置到像Linux那样一行命令解决所有包的安装,只是从最大程度上方便开发. 我们主 ...
随机推荐
- python - 接口自动化测试 - ReadExcel - 读取测试数据封装
# -*- coding:utf-8 -*- ''' @project: ApiAutoTest @author: Jimmy @file: read_excel.py @ide: PyCharm C ...
- 快速排序-php代码实现
<?php function quickSort(array &$a) { $n = count($a); quickSortInternally($a, 0, $n-1); } fun ...
- spring入门到放弃——spring事务管理
Spring事务提供了两种管理的的方式:编程式事务和声明式事务 简单回顾下事务: 事务:逻辑上的一组操作,组成操作的各个单元,要么全部成功,要么全部失败. 事务特性: 原子性:一个事务包含的各个操作单 ...
- Spring Boot 必须先说说 Spring 框架!
现在 Spring Boot 非常火,各种技术文章,各种付费教程,多如牛毛,可能还有些不知道 Spring Boot 的,那它到底是什么呢?有什么用?今天给大家详细介绍一下. Spring Boot ...
- faster-rcnn 目标检测 数据集制作
本文的目标是制作目标检测的数据集 使用的工具是 python + opencv 实现目标 1.批量图片重命名,手动框选图片中的目标,将目标框按照一定格式保存到txt中 图片名格式(批量) .jpg . ...
- Android ARM指令学习
在逆向分析Android APK的时候,往往需要分析它的.so文件.这个.so文件就是Linux的动态链接库,只不过是在ARM-cpu下编译的.所以学习Android下的ARM指令很重要.目前,市面上 ...
- bzoj 3190 [JLOI2013]赛车 半平面交+细节处理
题目大意 这里有一场赛车比赛正在进行,赛场上一共有N辆车,分别称为g1,g2--gn.赛道是一条无限长的直线.最初,gi位于距离起跑线前进ki的位置.比赛开始后,车辆gi将会以vi单位每秒的恒定速度行 ...
- windows.open 以post的方式传递参数
今天看到有篇文章寫到 windows.open 可以post方式傳遞參數,就趕緊照作看看,結果是可行的,感謝撰寫這篇文章的作者~ /** * window.open with post method ...
- watch watch watch the video! I got almost addicted. Oh what a fuck!!!!
http://v.huya.com/play/574329.html#relate_vid=570467
- 开始学习es6(一) 搭建个es6的开发环境
1.开始学习es6 如果想在浏览器跑es6 需要给es6个环境 因为一直用vue-cli全家桶 这样虽然方便 但如果用es6需要跑起个vue全家桶 于是想到可以用gulp搭建个开发环境 首先需要1. ...