Maxime Helen
Maxime Helen

Reputation: 1412

How setup.py install npm module?

I implemented a python web client that I would like to test.

The server is hosted in npm registry. The server gets ran locally with node before running my functional tests.

How can I install properly the npm module from my setup.py script?

Here is my current solution inspired from this post:

class CustomInstallCommand(install):
    def run(self):
        arguments = [
            'npm',
            'install',
            '--prefix',
            'test/functional',
            'promisify'
        ]
        subprocess.call(arguments, shell=True)
        install.run(self)

setup(
    cmdclass={'install': CustomInstallCommand},

Upvotes: 7

Views: 2526

Answers (2)

pramod
pramod

Reputation: 1493

from setuptools.command.build_py import build_py

class NPMInstall(build_py):
    def run(self):
        self.run_command('npm install --prefix test/functional promisify')
        build_py.run(self)

OR

from distutils.command.build import build

class NPMInstall(build):
    def run(self):
        self.run_command("npm install --prefix test/functional promisify")
        build.run(self)

finally:

setuptools.setup(
    cmdclass={
        'npm_install': NPMInstall
    },
    # Usual setup() args.
    # ...
)

Also look here

Upvotes: 10

user7870824
user7870824

Reputation:

You are very close, Here is a simple function that does just that, you can remove "--global" option is you want to install the package for the current project only, keep in mind the the command shell=True could present security risks

import subprocess
def npm_install(args=["npm","--global", "install", "search-index"])
  subprocess.Popen(args, shell=True)

Upvotes: 2

Related Questions