win10+x64+vs2015安装nodejieba记录

2020-10-15  本文已影响0人  taiyosen

今天使用npm安装nodejieba,遇到不少问题,在此记录一下。
安装前环境:

win10
x64
node v10.14.2
vs2015+vs2017
python 3.8.0

由于使用npm安装nodejieba必须进行编译,于是有了以下这些问题:

python版本问题

gyp ERR! stack Error: Command failed: C:\Users\fygame\AppData\Local\Programs\Python\Python38\python.EXE -c import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack   File "<string>", line 1
gyp ERR! stack     import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack                                ^
gyp ERR! stack SyntaxError: invalid syntax

从以上出错信息可以得知,import sys; print "%s.%s.%s" % sys.version_info[:3];是python2的语法,由于我安装的是python 3.8,所以提示语法错误。

解决方案

安装python2,我安装的是python 2.7。不用担心,python2和python3可以同时兼容安装的。安装后请确保将python2的安装目录添加到环境变量Path中(确保python2的路径在python3之前,这样优先使用python2)。
顺带附一下如何指定python2/3:

C:\Users\fygame>py -2
Python 2.7 (r27:82525, Jul  4 2010, 07:43:08) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

C:\Users\fygame>py -3
Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

VS程序集问题

F:\tgit\jiebatest>npm i nodejieba --msvs_version=2015

> nodejieba@2.4.1 install F:\tgit\jiebatest\node_modules\nodejieba
> node-pre-gyp install --fallback-to-build

node-pre-gyp WARN Using needle for node-pre-gyp https download
node-pre-gyp WARN Tried to download(404): https://github.com/yanyiwu/nodejieba/releases/download/2.4.1/nodejieba-v2.4.1-node-v64-win32-x64.tar.gz
node-pre-gyp WARN Pre-built binaries not found for nodejieba@2.4.1 and node@10.14.2 (node-v64 ABI, unknown) (falling back to source compile with node-gyp)
在此解决方案中一次生成一个项目。若要启用并行生成,请添加“/m”开关。
F:\tgit\jiebatest\node_modules\nodejieba\build\nodejieba.vcxproj(20,3): error MSB4019: 未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v
4.0\V110\Microsoft.Cpp.Default.props”。请确认 <Import> 声明中的路径正确,且磁盘上存在该文件。
gyp ERR! build error
gyp ERR! stack Error: `msbuild` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onExit (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\build.js:262:23)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)
gyp ERR! System Windows_NT 10.0.19041
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "build" "--fallback-to-build" "--module=F:\\tgit\\jiebatest\\node_modules\\nodejieba\\build\\Release\\nodejieba.node" "--module_name=nodejieba" "--module_path=F:\\tgit\\jiebatest\\node_modules\\nodejieba\\build\\Release" "--napi_version=3" "--node_abi_napi=napi" "--napi_build_version=0" "--node_napi_label=node-v64"
gyp ERR! cwd F:\tgit\jiebatest\node_modules\nodejieba
gyp ERR! node -v v10.14.2
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok

关键信息是:error MSB4019: 未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v 4.0\V110\Microsoft.Cpp.Default.props”。
打开相应目录,可以看到我安装的程序集是V140,这也是vs2015对应的程序集。

image.png
网上有人说,可以通过命令npm i nodejieba --msvs_version=2015解决,不过我试了没用。
也有人说npm config set msvs_version=2015,试了也是一样的结果。
于是我又试了一下npm config set msvs_version=2017,又提示:
KeyError:2017

于是,找到下面这篇文章:https://blog.csdn.net/yqq1997/article/details/85231849

解决方案

set VCTargetsPath=C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140

当然,为了后续方便,也可以将VCTargetsPath添加到系统环境变量中。重新安装,成功!

F:\tgit\jiebatest>npm i nodejieba

> nodejieba@2.4.1 install F:\tgit\jiebatest\node_modules\nodejieba
> node-pre-gyp install --fallback-to-build

node-pre-gyp WARN Using needle for node-pre-gyp https download
node-pre-gyp WARN Tried to download(404): https://github.com/yanyiwu/nodejieba/releases/download/2.4.1/nodejieba-v2.4.1-node-v64-win32-x64.tar.gz
node-pre-gyp WARN Pre-built binaries not found for nodejieba@2.4.1 and node@10.14.2 (node-v64 ABI, unknown) (falling back to source compile with node-gyp)
在此解决方案中一次生成一个项目。若要启用并行生成,请添加“/m”开关。
  index.cpp
  nodejieba.cpp
  win_delay_load_hook.cc
     Creating library F:\tgit\jiebatest\node_modules\nodejieba\build\Release\nodejieba.lib and object F:\tgit\jiebatest\node_modules\nodejieba
  \build\Release\nodejieba.exp
  Generating code
  All 3448 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
  Finished generating code
  nodejieba.vcxproj -> F:\tgit\jiebatest\node_modules\nodejieba\build\Release\\nodejieba.node
  nodejieba.vcxproj -> F:\tgit\jiebatest\node_modules\nodejieba\build\Release\nodejieba.pdb (Full PDB)
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN jiebatest@1.0.0 No description
npm WARN jiebatest@1.0.0 No repository field.

+ nodejieba@2.4.1
added 1 package from 1 contributor in 14.833s
上一篇下一篇

猜你喜欢

热点阅读