NPM - package.json#engines |如何指定 Python?
Posted
技术标签:
【中文标题】NPM - package.json#engines |如何指定 Python?【英文标题】:NPM - package.json#engines | How to specify Python? 【发布时间】:2016-12-17 05:58:51 【问题描述】:我需要在我的package.json
上指定一个python
版本。
我可以简单地做:
engines: "python": "2.7.11"
?
【问题讨论】:
【参考方案1】:在您的 package.json 中添加 "engines": "python": "2.7.11"
不会导致任何问题(据我所知),但它实际上也不会做任何事情。
确定执行此操作的适当方法取决于您的项目的具体情况。如果是关于您编写的 Python 代码,您可以检查 Python 脚本本身的版本。如果是关于package.json
中的构建步骤,您也许可以将测试作为构建步骤的一部分。
【讨论】:
【参考方案2】:从 NPM 7.x 开始(对于旧版 NPM 6.x 也有效),package.json
中的 "engines"
字段的唯一有效条目是 "node"
版本和 "npm"
版本。
此外,这不是一个硬约束,除非你也使用"engine-strict"
,如NPM docs所述:
除非用户设置了
engine-strict
配置标志,否则此字段仅是建议性的,并且只会在您的包作为依赖项安装时产生警告。
您的要求(期待特定的python
版本)与环境要求的相关性比您的 Node/NPM 环境更重要。
您可以通过实现"postinstall"
NPM 脚本来实现这一点,如果找不到所需的版本,可能会导致错误:
"scripts":
"postinstall": "node ./check-python.js"
这个脚本会在npm install
之后被NPM自动执行。您也可以改用“预安装”。
根据您的要求,考虑在您的“构建”或“预构建”脚本中使用它。在docs 中查看有关 NPM 前后脚本的更多详细信息。
那么,您的check-python.js
脚本可能类似于:
const exec = require('child_process');
const EXPECTED_PYTHON_VERSION = "2.7.11";
exec('python -c "import platform; print(platform.python_version())"',
function(err, stdout, stderr)
const currentPythonVersion = stdout.toString();
if(currentPythonVersion !== EXPECTED_PYTHON_VERSION)
throw new Error(`Expected Python version '$EXPECTED_PYTHON_VERSION' but found '$currentPythonVersion'. Please fix your Python installation.`);
);
【讨论】:
以上是关于NPM - package.json#engines |如何指定 Python?的主要内容,如果未能解决你的问题,请参考以下文章
如何将私有、自托管的 NPM 包与 Google App Engine 节点、标准环境一起使用