问题标签 [packaging]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
10823 浏览

python - 关于设置工具和替代品的问题

我最近在互联网上看到了大量的 setuptools。最近,我阅读了 James Bennett 的关于为什么没有人应该使用 setuptools的关于包装的帖子。从我在 Freenode 上的#python 开始,我就知道那里有一些人绝对讨厌它。我会把自己算在其中,但我确实使用它。

我已经将 setuptools 用于足够多的项目以了解它的不足之处,我更喜欢更好的东西。我不是特别喜欢 egg 格式及其部署方式。对于所有 setuptools 的问题,我还没有找到更好的选择。

我对pip之类的工具的理解是,它是一个 easy_install 替代品(而不是 setuptools)。事实上,pip 使用了一些 setuptools 组件,对吧?

我的大多数包都使用了 setuptools-aware setup.py,它声明了所有依赖项。当它们准备好后,我将构建一个 sdist、bdist 和 bdist_egg,并将它们上传到 pypi。

如果我想切换到使用 pip,我需要进行哪些更改才能摆脱 easy_install 依赖项?依赖项在哪里声明?我猜我需要摆脱使用 egg 格式,而只提供源代码分发。如果是这样,我如何生成 egg-info 目录?还是我什至需要?

这将如何改变我对 virtualenv 的使用?virtualenv 不使用 easy_install 来管理环境吗?

这将如何改变我对 setuptools 提供的“开发”命令的使用?我不应该使用它吗?有什么选择?

我基本上是想了解我的开发工作流程会是什么样子。

在任何人建议之前,我并不是在寻找依赖于操作系统的解决方案。我主要关心 debian linux,但 deb 包不是一个选项,原因是 Ian Bicking在这里概述。

0 投票
3 回答
2034 浏览

deployment - 如何构建 Java EE 系统?如何定义术语应用程序以及 EAR 的内容?

我正在为使用 Java EE 5 开发的大型软件系统设计构建系统和目录结构。构建系统将使用 ant 实现。

我们有多种不同的服务,它们按主题分组。每个服务都提供 Web 服务或 EJB。每个服务都运行在一个专用的应用服务器集群上。因此,我们有多个集群,其中一些集群可以按主题进行逻辑分组。

我确实阅读了通用定义和示例,但我仍然对 Java EE 术语感到困惑:

  • 什么是 Java EE 应用程序?因此,EAR 文件的内容是什么?
  • 什么是 Java EE 项目?(Netbeans 以及企业应用程序的 Java 蓝图指南项目约定中都使用了该术语)

我是否必须将所有 EJB 和 WAR-module-package-files 放在一个 EAR 中,以便这个 EAR 包含我们的完整系统?

或者我是否将每组服务放入一个 EAR,尽管这些服务只是在逻辑上分组而不是在技术上分组?

或者我是否为每个服务组装了一个单独的 EAR,即通常只包含一个 EJB jar 文件,有时还包含 EJB 和一个 WAR 文件?

或者我是否摒弃了应用程序的概念,只构建 EJB 和 WAR 文件,以便每个应用程序服务器集群只有一个部署文件?

我想,我的主要问题是:打包 EAR 文件有什么好处?

正如我目前所看到的,只需要 EAR-EJB 和 WAR 文件以及 ant-build-system 中嵌套子项目的概念和我们源代码的目录结构?

编辑:非常感谢您的回答!在我看来,打包到耳朵中的应用程序是一个相当原子的子系统。所以我想,我将有一个嵌套的子项目结构(只有逻辑,只对构建系统和源目录结构可见)和相当多的 EAR,每个 EAR 大多只包含一个 ejb-jar和/或war模块并实现单个服务(部署在单个应用程序服务器集群上)。

0 投票
4 回答
2953 浏览

python - 如何在 Gnome(使用 distutils 或 setuptools)中分发 Python 包的“.desktop”文件和图标?

目前我正在使用自动工具来构建/安装和打包我的项目,但我真的很想转向感觉更“pythonic”的东西。

我的项目由两个脚本、一个模块、两个 glade GUI 描述和两个 .desktop 文件组成。它目前是一个纯 python 项目,尽管这可能很快就会改变。

查看 setuptools 我可以轻松了解如何处理除 .desktop 文件之外的所有内容;它们必须最终位于特定目录中,以便 Gnome 可以找到它们。

开始使用 distuils/setuptools 是个好主意吗?

0 投票
1 回答
102 浏览

packaging - 将单个自动工具项目分组到另一个“项目”的最佳方法是什么?

我将创建一个“库”,并希望使用 autotoolset 管理每个单独的项目。此外,我希望能够同时构建整套库。

个别图书馆:

  • libyarconveniencezzz
  • libyarfoo
  • 自由行
  • 利比亚巴兹

我怀疑我可能只需要手工编写一个顶级 Makefile,然后让每个单独的库/便利库成为它自己的 autotoolset 包。

我做过类似的事情(四五年前),但我丢失了参考代码。我真正记得的唯一一件事是花了几个月的时间在自动工具中摸索,然后才按我想要的方式进行所有设置。

0 投票
10 回答
6393 浏览

java - 使用 Spring 依赖项打包并运行 Java 应用程序

我构建了一个独立的 Java 应用程序,它具有一堆依赖项(Apache Commons 库等)以及对 Spring 框架的依赖项,而 Spring 框架又具有一堆依赖项。

我在 Eclipse 中构建了它,它运行良好。现在我需要将它部署到生产环境中,因此我试图找出将它与所有依赖项打包的最佳方法,以及如何调用它(它将从命令行调用)。

蛮力的方法是将我的项目导出为一个 jar,找到所有依赖的 jar(及其依赖项!),将它们复制到一个公共目录,编写一个包含类路径中每个的 shell 脚本并运行它。显然,这看起来既愚蠢又乏味。

我应该使用 Ant、Maven 吗?我应该将所有依赖的 Spring jar 打包到一个大文件中吗?有关处理此问题的任何提示都会有所帮助。

0 投票
10 回答
16575 浏览

python - Python 守护进程打包最佳实践

我有一个我用 python 编写的工具,通常应该作为守护进程运行。打包此工具以进行分发的最佳实践是什么,特别是应如何处理设置文件和守护程序可执行文件/脚本?

相关地,是否有任何通用工具用于设置适合给定平台的启动时运行的守护程序(即Linux 上的初始化脚本、Windows 上的服务、OS X 上的启动)

0 投票
8 回答
1403 浏览

python - 什么时候(不)适合将依赖项与应用程序捆绑在一起?

概括

我最近与我的一个应用程序所依赖的框架的创建者进行了对话。在那次谈话中,他顺便提到,如果我将他的框架与我的应用程序捆绑在一起,并向最终用户交付一个我知道与我的代码一致的版本,这将使我的生活更简单。直觉上,我一直试图避免这样做,事实上,我一直在努力分割自己的代码,以便在不占用整个项目的情况下重新分配部分代码(即使任何人都很少有机会重用任何代码)它)。然而,在考虑了一段时间之后,我无法想出一个特别好的理由来这样做。事实上,现在我已经考虑过了,我看到了一个非常有说服力的案例来捆绑我所有较小的依赖项。我已经列出了利弊清单,我希望有人能指出我遗漏的任何东西。

优点

  • 版本的一致性意味着更容易测试和故障排除。
  • 应用程序可能会覆盖更广泛的受众,因为要安装的组件似乎更少。
  • 对依赖项的小调整可以更容易地在下游进行并与应用程序一起交付,而不是等待它们渗透到上游代码库中。

缺点

  • 包含依赖项的更复杂的打包过程。
  • 用户最终可能会在他们的机器上获得多个依赖项副本。
  • 根据 bortzmeyer 的回应,无法升级单个组件存在潜在的安全问题。

笔记

作为参考,我的应用程序是用 Python 编写的,并且我引用的依赖项是“轻量级”的,我的意思是很小且不常用。(所以它们并不存在于所有机器上,甚至不存在于所有存储库中。)当我说“打包”我的应用程序时,我的意思是在我自己的源代码树下分发,而不是使用驻留在我的包内的脚本安装,所以会有不可能有冲突的版本。我也仅在 Linux 上进行开发,因此无需担心 Windows 安装问题。

话虽如此,我也有兴趣听到关于更广泛(与语言无关)打包依赖问题的任何想法。是我遗漏了什么,还是我只是想多了一个简单的决定?

附录 1

值得一提的是,我对下游打包者的需求也相当敏感。我希望尽可能简单地将应用程序包装在特定于发行版的 Deb 或 RPM 中。

0 投票
5 回答
2715 浏览

java - 多个 Java 项目和重构

我最近加入了一个使用多个不同项目的项目。许多这些项目相互依赖,使用库中包含的另一个项目的 JAR 文件,因此无论何时更改一个项目,您都必须知道哪个其他项目使用它并更新它们。我想让这变得更容易,并且正在考虑将所有这些 java 代码合并到单独的包中的一个项目中。是否可以这样做,然后只在 jar 中部署一些包。我不想只部署其中的一部分,但如果可能的话,我已经被解雇了。

有没有更好的方法来处理这个?

0 投票
6 回答
2219 浏览

unix - 用于部署跨平台的打包?

在 Windows 上,应用程序通常打包为 MSI,在 Redhat Linux 上为 RPM,可用于将应用程序部署到所有平台(包括不同风格的 unix 和 windows)的最佳开源打包方法是什么?

内容将包括 exe、unix 二进制文件、java jar 文件、用户数据,甚至要运行的数据库脚本。

(我认识到每个目标操作系统的内容会有所不同,即二进制文件会有所不同,win exe 与 unix 二进制文件等,但例如配置文件可能相同,或者在 java 的情况下甚至字节码 jars)

我希望打包支持的关键特性是不同目录的不同用户和权限,但是我认识到支持这个特性多平台可能非常困难。

0 投票
3 回答
217 浏览

python - 以编程方式确定 python 模块是否已安装或处于开发模式

我倾向于在“setup.py develop”模式下开发我的应用程序。当程序安装“setup.py”时,我希望配置自动切换到生产模式。

这可以通过糟糕的黑客来完成,比如检查安装目录是否包含“setup.py”,但我想知道 pkg_resources 是否可以以某种方式为我做到这一点。