捆绑第三方库以便在Python 3中分发的最佳实践

时间:2011-04-21 15:24:21

标签: python-3.x dependencies software-distribution

我正在使用Python开发应用程序3.将第三方库用于开发过程和最终用户分发的最佳做法是什么?请注意,我正在这些约束中工作:

  • 团队中的开发人员应该拥有完全相同的库版本。
  • 理想的解决方案适用于Windows和Linux。
  • 我想在使用我们自己的软件之前避免让用户安装软件;也就是说,在使用我们的产品之前,他们不应该安装产品A和产品B.

4 个答案:

答案 0 :(得分:3)

您可以使用setuptools为您的库创建egg文件,假设它们已经没有以egg形式提供。然后,您可以将鸡蛋与软件捆绑在一起,这需要安装它们,或者确保它们位于导入路径上。

这有一些复杂性,即如果你的库有C扩展,那么你的蛋就会变成特定于平台的,但根据我的经验,这是最广泛接受的用Python捆绑东西的方法。

我不得不说这仍然是Python的弱点之一;第三方生态系统当然是针对开发人员而非最终用户。

答案 1 :(得分:1)

答案 2 :(得分:1)

没有最佳做法,但人们会关注一些不同的曲目。关于商业产品分销,有以下内容:

管理您自己的软件包服务器

关于您的开发过程,通常是从本地包服务器更新您的开发箱。这允许您“冻结”依赖项列表(即只是停止获取上游更新),以便每个人都使用相同的版本。您可以在特定时间更新并让开发人员更新,让每个人保持同步。

对于客户安装,您通常会编写安装脚本。您可以同时收集所有软件包并安装libs以及另一个软件包。尝试安装新的Python甚至任何标准库可能会出现问题,因为客户可能已经依赖于不同的版本。通常,您可以安装在沙箱中以将软件包与系统软件包分开。这在Linux上比Windows更具问题。

<强>工具链

另一种选择是为每个支持的操作系统创建工具链。工具链是所有依赖项(最多但不包括基本OS库,如glibc)。此工具链将为开发人员 AND 客户打包和分发。工具链的最佳实践是:

  • 更改可执行文件以防止混淆。 (即.python - &gt; pkg_python)
  • 不要安装在.../bin目录中以防止意外使用。 (即,在Linux上,您可以在.../libexec下安装。/opt也会被使用,但我个人却厌恶它。)
  • 将您的lib安装在lib/python/site-packages下的正确位置,这样您就不必使用PYTHONPATH。
  • 分发可执行文件的源.py文件,以便安装脚本可以适当地重新定位它们。
  • 包格式应该是OS本机包(RedHat - &gt; RPM,Debian - &gt; DEB,Win - &gt; MSI)

答案 3 :(得分:0)

假设第三方库可从pypi获得,请使用 distutils ,并在setup.py中指定所需的版本。