2

我对 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,Docs,再次非常有帮助,但我被困在“断开系统的最后一英里”
  • 然后我发现我可以将 virtualenv 打包成一个轮子 :-) 耶
  • 然后我发现我可以将easy_install打包为python程序:-)是的,但这取决于setuptools,嘘,我找不到如何打包/安装这些

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

4

2 回答 2

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一次。

于 2014-09-17T15:22:58.547 回答
1

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

  1. 使用您的在线机器下载 python 包或安装程序。
  2. 使用包管理器使用的离线方法或离线机器上的 windows 的 python 安装程序安装 python。
  3. 在在线机器上使用pip download -r requirements.txt“requirments.txt”包含您将需要正确格式的包
  4. 用于pip install --find-links=<your-dir-here> <pkgname>在离线机器上安装包。
于 2017-02-22T16:04:26.627 回答