在多个操作系统上(或为多个操作系统)创建Python发行版(EGG)的最佳实践是什么
我们的是一家python商店。我们在内部开发了不同的python包,并将部署到客户的环境(机器)上 这就是我们的开发和发布周期是如何发生的 一旦开发人员完成了包的“测试”,就准备好包的分发(egg文件)并将其推送到一个中央归档位置。当我们想要向客户部署软件时,相同的发行版(egg文件)将被下载并安装到他们的环境中 假设“测试”在多个操作系统上进行(以检查API在不同平台上的兼容性),那么准备分发版并将其推送到中央归档位置的最佳做法是什么在多个操作系统上(或为多个操作系统)创建Python发行版(EGG)的最佳实践是什么,python,setuptools,egg,software-packaging,Python,Setuptools,Egg,Software Packaging,我们的是一家python商店。我们在内部开发了不同的python包,并将部署到客户的环境(机器)上 这就是我们的开发和发布周期是如何发生的 一旦开发人员完成了包的“测试”,就准备好包的分发(egg文件)并将其推送到一个中央归档位置。当我们想要向客户部署软件时,相同的发行版(egg文件)将被下载并安装到他们的环境中 假设“测试”在多个操作系统上进行(以检查API在不同平台上的兼容性),那么准备分发版并将其推送到中央归档位置的最佳做法是什么 最好在归档服务器上安装特定于操作系统的egg(如sampl
最好在归档服务器上安装特定于操作系统的egg(如samplepkg-1.0.0.win32.egg和samplepkg-1.0.0.linux.egg?不确定如何使用setuptools以这种方式准备它们)还是只安装一个egg,因为API在不同平台上保持不变?社区遵循的任何其他实践?如果满足以下条件,您可以使用单个软件包:
通常,最好不要使用在所有目标平台上都不可用的特定于操作系统的功能。标准库在这方面有很好的文档记录。我认为在这种情况下,由于罗兰上面提到的原因,使用单个软件包会更加复杂。在您的开发环境中,您可以为不同的平台设置单独的文件夹,每个文件夹都有特定于平台的代码(例如用C/C++编写的扩展/库)。您需要在这些文件夹中模拟setuptools来生成单独的鸡蛋,但最终要比尝试将所有东西都放在一个包中复杂得多(我认为,在不了解实际使用的代码的情况下)
在任何一种情况下,阅读标准库上的文档以及distutils()都会帮助您找到解决方案。特定于平台的鸡蛋仅用于分发包含C代码的软件包;否则,egg文件本身是独立于平台的,您只需要分发一个独立于平台的egg 如果您使用自动安装工具或pkg_resources的运行时API来查找库和插件,那么实际上您可以将所有鸡蛋转储到一个目录中,安装工具或运行时API将选择从哪个鸡蛋安装或导入
tl;dr版本:setuptools构建鸡蛋的方式就是它们的分发方式;如果你试图把一个跨平台的鸡蛋变成一个依赖平台的鸡蛋,或者反过来,你可能会经历一些痛苦 如果您只有python模块,请将所有差异隐藏在python中,可以是相同的文件(python std lib)或单独的文件(pyserial) 如果您已经编译了模块,那么就有点麻烦了 对于需要编译扩展的项目,我使用以下目录结构:
./lib/display.py # frontend, platform-independent
./lib.linux-x86_64-2.6/_display.so
./lib.linux-armv5tejl-2.6/_display.so
程序开头的代码如下:
sys.path.append("lib.%s-%s-%s.%s" % ((posix.uname()[0].lower(),
posix.uname()[4])
+sys.version_info[:2]))
您也可以将这样的结构包装在.egg中,只要您指定它不是zip安全的