无效命令 'npm run build' 当 运行 来自 setup.py

invalid command 'npm run build' when running it from setup.py

我正在尝试通过 setup.py 配置文件使用 npm run build 构建我的应用程序的 Javascript 端。我正在按照其他地方的建议使用 distutils 中的 build class,但是当我 运行 pip install .

时出现错误
from setuptools import setup
from distutils.command.build import build
import json
import os

class javascript_build(build):
    def run(self):
        self.run_command("npm run build")
        build.run(self)

if __name__ == "__main__":
    setup(
        cmdclass={'build': javascript_build},
         )

有人知道为什么会这样吗?

 running npm run build
 error: invalid command 'npm run build'
 ----------------------------------------
 ERROR: Failed building wheel for chemiscope

编辑 1:所以看起来 运行ning npm run build 不是 运行ning python setup.py npm run build。所以我的问题有点改变,我如何准确地将 distutils 强制为 运行 npm run build?

我已设法通过使用 subprocess.check_output() 来实现此功能,如下所示。我不确定这是否理想,但它确实有效。

from setuptools import setup
from distutils.command.build import build
from distutils import log
import subprocess
import json
import os

class javascript_build(build):
    def run(self):
        log.info("running npm run build")
        subprocess.check_output(['npm', 'run', 'build'], shell=True)
        build.run(self)


if __name__ == "__main__":
    setup(
        cmdclass={
            'build': javascript_build,
            },
    )

self.run_command("xxx") 不是 运行 一个程序——它调用另一个 distutils/setuptools 子命令;类似于调用 python setup.py xxx 但来自同一进程,而不是通过命令行。所以你可以 self.run_command("sdist") 但不能 self.run_command("npm").

在您的情况下,您需要 os.system("npm run build")subprocess.call("npm run build")