gpt4 book ai didi

javascript - 有哪些选项可用于定义具有 node.js 依赖项的 Python 包?

转载 作者:太空狗 更新时间:2023-10-29 20:48:53 26 4
gpt4 key购买 nike

目前,我有一些(未发布的)Python 包在本地使用,我在 Linux 上使用 Bash 脚本安装(用于开发目的)到激活的(否则为“空”)虚拟环境中,如下所示:

cd /root/of/python/package
pip install -r requirements_python.txt # includes "nodeenv"
nodeenv -p # pulls node.js and integrates it into my virtual environment
npm i -g npm # update npm ...
cat requirements_node.txt | xargs npm install -g
pip install -e .

背景是我有许多 node.js 依赖项,JavaScript CLI 脚本,它们由我的 Python 代码调用。

当前方法的优点:
  • 死简单:依赖 nodeenv用于所有必需的管道
  • 理论上可以在setup.py内实现与 subprocess.Popen

  • 当前方法的缺点:
  • 仅使用 Bash 的类 Unix 平台
  • “很难”分发我的包,比​​如在 PyPI
  • 需要虚拟环境
  • 如果在全局范围内安装软件包,则可能会产生“有趣”的副作用
  • 可能会干扰当前虚拟环境中 nodeenv 的预先存在的配置/“部署”

  • 为 Python 包定义 node.js 依赖项并使其可发布的规范(如果有)或只是一种理智的、潜在的跨平台方法是什么?

    为什么这个问题甚至相关? JavaScript 不仅仅用于 Web 开发(更多)。还有一些有趣的(相关的)数据处理工具。如果您不想错过/忽略它们,那么欢迎来到这种特殊形式的 hell 。

    我最近遇到了 calmjs ,这似乎是我正在寻找的。我还没有对它进行太多实验,它似乎也是一个相对年轻的项目。

    我开始了 issue there asking a similar question .

    编辑(1):有趣的资源: JavaScript versus Research Computing - A Brief Guide for Those Who Regret That This Has Become Necessary

    编辑(2):我开始了 issue against nodeenv ,询问我如何使项目依赖于它。

    最佳答案

    (免责声明:我是calmjs的作者)

    在对这个特定问题再考虑几天之后,这个问题实际上包含了多个问题,这些问题可能会或可能不会相互正交,具体取决于一个人的观点,给出以下一些(列表并不详尽)

  • 开发人员如何确保他们拥有所有信息
    需要安装包时给一个。
  • 一个项目怎么做
    确保他们站立的地面是坚固的(即拥有所有
    所需的依赖项)。
  • 用户安装给定项目的难易程度。
  • 重现给定的构建有多容易。

  • 对于单一语言、单一平台的项目,提出的第一个问题很容易回答——只需使用为该语言实现的任何包管理解决方案(即 Python - PyPI、Node.js - npm)。其他问题一般都成立。

    对于多语言、多平台,这就是它完全崩溃的地方。长话短说,这就是为什么对于任何版本的 Windows、Mac 或 Linux(各种主流发行版),项目通常都有多组指令来安装他们的软件,特别是二进制形式,以解决第三个问题,以便它很容易对于最终用户(通常最终是可行的,但不一定容易)。

    对于开发人员和系统集成商来说,他们肯定对问题 2 和 4 更感兴趣,他们可能想要一个适用于任何平台的自动化脚本。这就是你已经得到的,除了它只适用于 Linux,或者任何 Bash 可用的地方。现在这也引出了一个问题:如何确保 Bash 在系统上可用?一些系统管理员可能更喜欢其他形式的 shell,所以我们又回到了同样的问题,但不是问 Node.js 是否存在,我们必须询问 Bash 是否存在。所以这个问题除非画一条线,否则基本上是无法解决的。

    第一个问题还没有真正被提及,我将通过这种方式来让这个问题变得有趣:给定一个来自 npm 的包需要一个 Python 包,如何指定对 PyPI 的依赖?原来存在这样一个项目: nopy .之前没用过,但粗略一看,它提供了一种在 package.json中记录依赖信息的特定方式。文件,这是 Node.js 包传递有关自身信息的标准方法。请注意,它有一种管理 Python 包的非标准方式,但是鉴于它确实使用了任何可用的 Python,如果激活了 Python 虚拟环境,它可能会做正确的事情。这样做也意味着 Node.js 包依赖项可能有办法找出它们的 Node.js 依赖项声明的所需 Python 依赖项,但请注意,在它之上没有其他东西(或其他一些基础/行),则无法从环境中断言它将保证做需要做的事情。

    自然地,回到 Python,这个问题之前已经被问过(但不一定以对您有用的方式专门针对您,因为上下文都不同):
  • javascript dependencies in python project
  • How to install npm package from python script?
  • Django, recommended way to declare and solve JavaScript dependencies in blocks
  • pip: dependency on javascript library

  • 无论如何,calmjs 只解决问题 1 - 即让开发人员能够从给定的 Python 包中找出他们需要的 Node.js 包,并在较小程度上帮助解决问题 4,但没有 2 和 3 的保证没有完全解决。

    从 Python 依赖管理的 Angular 来看,在尝试使用所需的外部工具之前,无法保证它们可用(它要么有效,要么无效,同样来自 Node.js,如前所述,感谢您顺便说一下, your question 在问题跟踪器上)。如果需要这种特殊保证,许多系统集成商会使用他们最喜欢的操作系统级别的包管理器(即 dpkg/apt、rpm/yum 或 Linux 上的其他任何东西,OS X 上的 Homebrew,Windows 上的 Chocolatey),但同样这确实需要安装更多的依赖项。因此,如果要支持多个平台,则没有通用的解决方案,除非缩小范围,或者有某种标准的持续集成,可以生成工作安装镜像,然后将其部署到组织使用的任何虚拟化服务上(只是一个例子)。

    如果没有所有的具体基线,这个问题很难为所有相关方提供一个满意的答案。

    关于javascript - 有哪些选项可用于定义具有 node.js 依赖项的 Python 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49953785/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com