Python打包和分发方案

时间:2014-08-17 19:58:54

标签: python package setuptools python-wheel

我对python包装还是比较新的,每次我觉得我找到“解决方案”时,我都会抛出另一个曲线球,这是我的问题,接着是我尝试过的:

  • 我安装了带有Python 2.7.3的CentOS和Ubuntu系统,这些系统是从网络分区的,所以我必须创建一个“all in one package”
  • 目标系统 NOT 安装了setuptools,easy_install,pip,virtualenv(这是我在这里要解决的问题)
  • 对于应用程序,requirements.txt(或setup.py install_dependencies)相当繁重(Flask等等)(但实际上,这不是问题)

我的包装成熟度进展缓慢:

对于连接系统,我有一个非常好的过程

  • 包装:python2.7 setup.py sdist
  • 安装:创建virtualenv,解压分发,python setup.py install

对于断开连接的系统,我尝试了一些方法。车轮似乎是合适的,但我无法进入包括setuptools,easy_install,pip的“最终”安装。我不熟悉轮子,所以也许我错过了一些明显的东西。

我从这些引用开始:

  • Python on Wheels,这非常有帮助,但我无法获得我的.sh脚本,测试数据等...安装所以我实际上正在使用wheel / sdist混合现在
  • Wheel, the Docs,再次,非常有帮助,但我被困在“断开系统的最后一英里”
  • 然后我发现我可以将virtualenv打包成轮子:-) Yay
  • 然后我发现我可以将easy_install打包为python程序:-)但是,这取决于setuptools,嘘,我找不到如何打包/安装

是否有引用具有Python的系统的引用,已断开连接,但没有setuptools,pip,wheels,virtualenv?我安装这个简单代理所必须做的事情列表变得太长了:/我想如果我能完成依赖链,必须有一种方法可以将自定义脚本锁定到setup.py来缩小自定义步骤退缩......

1 个答案:

答案 0 :(得分:1)

您的流程可能会根据您定位的平台而有所不同,但一般来说,获得您要实现的目标的典型方法是在在线计算机上下载包,将其复制到离线计算机,然后从文件而不是从URL或存储库安装它们。

基于RPM的发行版的可能工作流程可能是:

  1. 通过二进制包安装python-pip(使用rpmyum-downloadonly,在在线计算机上下载该程序包,然后将其复制并安装在离线程序包{{1 }})。
  2. 在您的在线计算机上,使用rpm -i python-pip.<whatever-version-and-architecture-you-downloaded>下载所需的软件包。
  3. pip install --download <pkgname>scp将指定目录rsync打包到离线计算机上
  4. 使用X在离线计算机上安装软件包。
  5. 如果您必须在许多服务器上复制该过程,我建议您在防火墙后面设置自己的存储库。在pip install --find-links=<your-dir-here> <pkgname>的情况下,它非常简单,因为它只是告诉pip使用目录作为自己的索引:

    pip

    对于RPM或DEB repos来说有点复杂(但不是火箭科学!),但也可能没有必要,因为你真的应该只安装$ pip install --no-index --find-links=file:///local/dir/ SomePackage 一次。