这是昨天晚上发生的事情,已经记不清一些细节了,但崩溃的心情到现在还犹在心头......还记得当时做完后大脑一片空白心力交瘁的感觉。
大致经过是需要编译一个前端,所以就是 npm && gulp && bower install
开始按照说明配置。中间经历了很多小问题(配置过前端的同学应该都懂😭,就是不痛不痒但很 tricky 占用时间,当时心态已经有点不太好),之后遇到了这个 Bug:
File "<String>" line1
import sys;print "%s.%s.%s" % sys.version_info[:3];
SyntaxError invalid syntax
看的时候心里大约是 WTF,因为知道有 js 有需要配置 C++ 的,有需要下载 dev-tool 的,但需要 Python 来支持运行还是少见。Python 2/3 著名区别是 print 在 Python2 是一个 statement,可以直接输出其他元素;而 print 在 Python3 是一个 function,必须要用 print() 来输出。所以这行语句就仅适合 Python2,而在 Python3 中无法使用。
然后看 StackTrace,发现对应的项目是有 4.6k+ star 的项目 node-gyp。所以就找到对应的 commit,发现来自于一个对应的 PR-1504,具体的修改信息是在 这里,原来的语句是 var args = ['-c', 'import platform; print(platform.python_version());']
, 适用于 2 和 3 版本,修改后才变成了 var args = ['-c', 'import sys; print "%s.%s.%s" % sys.version_info[:3];']
。
在那条 PR 里可以看到有人在 8 月份的时候已经发现了这个问题并提出了修复, [ this broke python3, i created a PR with a small fix here #1534 ] ,官方回应是说还需要一段时间来进行修复 [ so it might take some time for this to get to the public.] 。
这件事真的证明了单测的重要性,真的很多看起来没有问题的修改不知不觉就会改变程序的运行方式啊 !
1.后续是直接下了一个 python2.7 后 config --path 临时指定了一个版本,但发现还是有问题,就直接放弃构建项目了,直接睡觉......
2.node-gyp 项目对 Python 的 官方支持版本说明 说明很模糊,不知道 recommened 对应的反面是完全不能支持还是可以运行但效果不好
1
whileFalse 2018-10-21 04:38:41 +08:00
node-gyp 本来就是不兼容 python3 的,和单元测试有个毛线关系。
|
2
Allianzcortex OP @whileFalse 您可以看我在分界线下面的说明哈~ README.md 里提到了这个,但我理解是如果完全不支持 Python3 的话那条改正的 PR( https://github.com/nodejs/node-gyp/pull/1534) 就可以直接回复说不支持,没必要回复说 [thank you for following up. We'll land this soon, then we need to release a new version and get that landed in npm so it might take some time for this to get to the public] 考虑合并,所以就有点困惑
|
3
whileFalse 2018-10-21 05:01:27 +08:00
@Allianzcortex 我理解报错的这个部分是用于测试当前 python 环境的版本号的。也就是说如果 python 是 3,则应该显示一个易于理解的信息,说明 node-gyp 不能在当前环境下工作,而不是直接崩掉。这一测试代码应该能兼容 2 和 3。
你说得对这确实是单元测试可以检查出的问题。不过,这显然也无法让 node-gyp 的主程序在 py3 下运行。 |