我试图通过setup.py
配置文件使用npm run build
构建我的应用程序的Javascript端。我使用build
类从distutils
建议在其他地方,但我得到一个错误,当我运行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
?
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")
。
我已经设法通过使用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,
},
)