简体   繁体   中英

Building modules using node-gyp on Openshift

When trying to build modules that require node-gyp like node-canvas on Openshift I get this error:

> canvas@1.2.3 install /var/lib/.../repo/node_modules/canvas
> node-gyp rebuild

Traceback (most recent call last):
  File "/opt/rh/v8314/root/usr/bin/gyp", line 15, in <module>
    import gyp
ImportError: No module named gyp
gyp ERR! configure error 
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/opt/rh/nodejs010/root/usr/lib/node_modules/node-gyp/lib/configure.js:343:16)
gyp ERR! stack     at ChildProcess.emit (events.js:98:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:820:12)
gyp ERR! System Linux 2.6.32-504.16.2.el6.x86_64
gyp ERR! command "node" "/opt/rh/nodejs010/root/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /var/lib/.../repo/node_modules/canvas
gyp ERR! node -v v0.10.35
gyp ERR! node-gyp -v v1.0.2
gyp ERR! not ok 

npm ERR! canvas@1.2.3 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the canvas@1.2.3 install script.
npm ERR! This is most likely a problem with the canvas package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get their info via:
npm ERR!     npm owner ls canvas
npm ERR! There is likely additional logging output above.
npm ERR! System Linux 2.6.32-504.16.2.el6.x86_64
npm ERR! command "node" "/opt/rh/nodejs010/root/usr/bin/npm" "install" "node-canvas-1.2.3"
npm ERR! cwd /var/lib/.../app-root/runtime/repo
npm ERR! node -v v0.10.35
npm ERR! npm -v 1.4.28
npm ERR! code ELIFECYCLE
npm ERR! not ok code 0

My understanding is that node-gyp is importing the gyp python module that is not found. I solved this issue some weeks ago by setting the PYTHONPATH env variable to that gyp python module in my node_modules directory (/var/lib/.../repo/node_modules/node-gyp/gyp/pylib). That way the build was completed successfully and I could use the node-canvas module. Now I suspect something changed in Openshift and this technique is not working anymore. Even though PYTHONPATH is set, the gyp module still cannot be found when I npm install the module. Any idea why the gyp module cannot be found even though PYTHONPATH is set to include the location of the module? Maybe it is ignored? The gyp file contains:

import sys

# TODO(mark): sys.path manipulation is some temporary testing stuff.
try:
  import gyp
except ImportError, e:
  import os.path
  sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), 'pylib'))
  import gyp

if __name__ == '__main__':
  sys.exit(gyp.main(sys.argv[1:]))

Can't see the reason why PYTHONPATH is not used (and can't check PYTHONPATH value in gyp file as it would require root permissions, which I don't think I have on Openshift). Maybe npm is somehow resetting the env?

I solved by invoking node-gyp directly and not through npm install:

node-gyp configure
node-gyp build
node-gyp install

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM