如果我创建了一个 FOSS 命令行实用程序(即应用程序而不是库)并且我想将它作为一个包分发以方便安装,那么通过以下方式执行此操作是否更好:
- 应用程序级别的包管理(例如 RubyGems,如果它是用 Ruby 编写的;EasyInstall 如果是 Python 等),或者
- 系统级包管理(例如 Mac 的 MacPorts、Debian 的 Debian 包等)。
注意。如果您认为没有普遍正确的做法,而是认为在特定情况下一种或另一种方法显然是最好的,那么这些情况是什么?
如果我创建了一个 FOSS 命令行实用程序(即应用程序而不是库)并且我想将它作为一个包分发以方便安装,那么通过以下方式执行此操作是否更好:
注意。如果您认为没有普遍正确的做法,而是认为在特定情况下一种或另一种方法显然是最好的,那么这些情况是什么?
根据这篇博文,你应该这样做的主要原因
切勿在 Debian 系统上使用 setuptools/ez_setup 在系统范围内安装 Python 模块
是
您可以在不同的安装路径中拥有相同 Python 模块的不同版本(通过easy_install
和安装aptitude
)
没有easy_uninstall
。(但是,pip
似乎能够做到这一点:如何删除使用 Python 的 easy_install 安装的软件包?)
这同样适用于 CLI 工具,它也是某种(Python)模块。
当然,easy_install
与所有系统包管理器的打包相比,打包所需的工作更少。但是,您为什么不打包您的工具,easy_install
并向熟悉针对特定目标打包的人寻求帮助呢?submit@bugs.debian.org
(对于 Debian,您可以尝试发送主题以“[needs-packaging]”开头的电子邮件。)
让我仅从我作为用户的有限经验——Python 和 Debian/Ubuntu 来说明。当我最终从 Windows 切换到 Ubuntu 时,主要原因之一是可以轻松安装几乎所有为 Debian 打包的软件。第一个过渡时期的问题之一是:
“最近的多路diff工具是什么?好的,有融合和扩散。让我们看看……”
sudo apt-get install meld diffuse
“好的。这个剪贴板管理器叫做 Parcellite?”
sudo apt-get install parcellite
“我喜欢Task Coach。他们有吗?”
sudo apt-get install taskcoach
“现在为什么svn
不安装开箱?”
sudo apt-get install svn
... (some error)
apt-file search svn
... (tl;dr)
apt-file search svn | grep /svn$
sudo apt-get install subversion
如此多的方便包装。请注意,至少提到的前两个工具是纯 Python 工具,但我不在乎——系统包管理器为我做了一切。如果这是唯一的选择,也许我什至会使用它来安装它们easy_install
,但是我本可以意识到使用easy_install
.
在我看来,对于用户对其分发方式感到满意的应用程序而言,所遵循的程序大致如下:
举个例子:
可能有比这些更好的例子。此外,到目前为止,我的结论只是观察性结论:我还没有找到明确列出此决策流程的参考资料。因此,我欢迎更全面的答案。
注意。流程图的代码是在线的,以防您想根据自己的答案对其进行调整。为了能够使用它,你需要一个工作的 LaTeX 安装。