关于包:Python打包和分发方案

Python Packaging and Distribution Scenario

我仍然相对较新的python包装,每次我觉得我找到"解决方案",我抛出另一个曲线球,这是我的问题,然后我尝试了:

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

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

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

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

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

我从这些引用开始:

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

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


@mac提到的pip install --download选项已被弃用和删除。相反,文档声明应该使用pip下载方法。所以工作流程应该是:

  • 使用在线计算机下载python包或安装程序。
  • 使用包管理器使用的脱机方法或脱机计算机上的窗口的python安装程序安装python。
  • 在在线机器上使用pip download -r requirements.txt,其中"requirments.txt"包含您需要正确格式的软件包
  • 使用pip install --find-links= 在脱机计算机上安装软件包。

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

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

  • 通过二进制软件包安装python-pip(使用rpmyum-downloadonly,在在线计算机上下载软件包,然后将其复制并使用rpm -i python-pip.将其安装在脱机软件包上)。
  • 在您的在线计算机上,使用pip install --download 下载所需的软件包。
  • scprsync将指定目录X的软件包放到离线计算机上
  • 使用pip install --find-links= 在脱机计算机上安装软件包。
  • 如果您必须在许多服务器上复制该过程,我建议您在防火墙后面设置自己的存储库。在pip的情况下,它非常简单,因为它只是告诉pip使用目录作为自己的索引:

    1
    $ pip install --no-index --find-links=file:///local/dir/ SomePackage

    对于RPM或DEB repos来说有点复杂(但不是火箭科学!),但可能也没有那么必要,因为你真的应该只安装python-pip一次。