【问题标题】:invalid command 'npm run build' when running it from setup.py从 setup.py 运行命令“npm run build”时无效
【发布时间】:2021-10-14 21:23:39
【问题描述】:

我正在尝试通过setup.py 配置文件使用npm run build 构建我的应用程序的Javascript 端。我正在使用distutils 中的build 类,正如其他地方所建议的那样,但是当我运行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:所以它似乎不是运行npm run build,而是运行python setup.py npm run build。所以我的问题有点改变,我该如何强制distutils 运行npm run build

【问题讨论】:

  • 您之前在应用中安装过nodejs吗? npm 不会运行,直到您要安装的系统具有 nodejs 运行时。
  • 是的,我可以正常从命令行运行npm run build。只有当我尝试通过setup.py 文件执行此操作时,它才会产生这个无效的命令。

标签: python setuptools setup.py distutils


【解决方案1】:

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")

【讨论】:

    【解决方案2】:

    我已经设法通过使用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,
                },
        )
    

    【讨论】:

      猜你喜欢
      • 2021-03-03
      • 1970-01-01
      • 2019-11-15
      • 2019-04-27
      • 2017-10-05
      • 1970-01-01
      • 2020-09-14
      • 2022-06-16
      • 1970-01-01
      相关资源
      最近更新 更多