我正在编写一个依赖于几个库(Paramiko 等)的 CLI python 应用程序。如果我下载它们的源并将它们放在我的主应用程序源下,我可以导入它们并且一切正常。为什么我需要运行他们的 setup.py 安装程序或处理 python 包管理器?
我知道在部署服务器端应用程序时,管理员可以运行 easy_install/pip 命令等来安装先决条件,但对于必须作为仅依赖于 python 的独立应用程序分发的 CLI 应用程序之类的脚本二进制,推荐的方法是什么?
我正在编写一个依赖于几个库(Paramiko 等)的 CLI python 应用程序。如果我下载它们的源并将它们放在我的主应用程序源下,我可以导入它们并且一切正常。为什么我需要运行他们的 setup.py 安装程序或处理 python 包管理器?
我知道在部署服务器端应用程序时,管理员可以运行 easy_install/pip 命令等来安装先决条件,但对于必须作为仅依赖于 python 的独立应用程序分发的 CLI 应用程序之类的脚本二进制,推荐的方法是什么?
几个原因:
并非所有包都是纯 python 包。setup.py
在您的包中包含 C 扩展并自动化编译过程很容易。
自动化依赖管理;pip
安装程序工具 ( , easy_install
, )为您声明和安装依赖项zc.buildout
。依赖关系也可以动态声明(尝试导入json
,如果失败,声明依赖simplejson
等)。
自定义资源安装设置。安装过程是高度可配置和动态的。依赖检测也是如此。例如,cx_Oracle
必须跳过相当多的环节才能使安装变得简单,包括它需要支持的所有各种平台和 Oracle 库分发选项的怪癖。
为什么您仍想为 CLI 脚本执行此操作?这取决于 CLI 对您的重要性;你会在未来几年保持这种状态吗?然后我仍然会使用 a setup.py
,因为它记录了依赖项是什么,包括最低版本需求。您可以添加测试 ( python setup.py test
),并轻松部署到新位置或升级依赖项。