【问题标题】:Python Packaging and Distribution ScenarioPython打包分发场景
【发布时间】:2014-10-10 18:20:38
【问题描述】:

我对python打包还是比较陌生,每次我想我找到“解决方案”时,我都会被抛出另一个曲线球,这是我的问题,接下来是我尝试过的问题:

  • 我已经安装了 Python 2.7.3 的 CentOS 和 Ubuntu 系统,这些系统从网络上进行了分区,因此我必须创建一个“一体化包”
  • 目标系统没有安装了 setuptools、easy_install、pip、virtualenv(这是我要解决的问题)
  • requirements.txt(或 setup.py install_dependencies)对于应用程序来说相当繁重(Flask 等...)(虽然实际上,这不是问题)

我的包装复杂度进展缓慢:

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

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

对于断开连接的系统,我尝试了一些方法。 Wheels 似乎是合适的,但我无法进行包含 setuptools、easy_install、pip 的“最终”安装。我是车轮新手,所以也许我遗漏了一些明显的东西。

我从这些参考资料开始:

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

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

【问题讨论】:

  • 但是你能在那里安装东西吗?如果可以安装 pip,则可以将所有依赖项上传到那里的目录,然后 pip install 每个目录。

标签: python package setuptools python-wheel


【解决方案1】:

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

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

  1. 通过二进制包安装python-pip(使用rpmyum-downloadonly,在线机器上下载包,然后将其复制过来并使用rpm -i python-pip.<whatever-version-and-architecture-you-downloaded>离线安装)。
  2. 在您的在线机器上,使用pip install --download <pkgname> 下载您需要的包。
  3. scprsync 将包到给定目录 X 到您的离线机器上
  4. 使用pip install --find-links=<your-dir-here> <pkgname> 在您的离线计算机上安装软件包。

如果您必须在多台服务器上复制该过程,我建议您在防火墙后面设置自己的存储库。对于pip,这很简单,只需告诉pip 使用一个目录作为自己的索引:

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

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

【讨论】:

    【解决方案2】:

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

    1. 使用您的在线机器下载 python 包或安装程序。
    2. 使用包管理器使用的离线方法或离线机器上的 windows 的 python 安装程序安装 python。
    3. 在在线机器上使用pip download -r requirements.txt,其中“requirments.txt”包含您将需要proper format 的包
    4. 使用pip install --find-links=<your-dir-here> <pkgname> 在您的离线机器上安装软件包。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-19
      • 2011-08-31
      • 1970-01-01
      • 2017-06-30
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 2018-08-08
      相关资源
      最近更新 更多