【问题标题】:What's the best way to make a private, self-contained python environment?制作私有的、自包含的 python 环境的最佳方法是什么?
【发布时间】:2011-06-05 02:42:29
【问题描述】:

我想创建一个私有的、自包含的 Python 环境,它不链接回系统库(virtualenv 的方式),并且还包括它自己的 Python 包标准 C/C++ 库版本,这些包只是用于这些库(例如 PIL 和 libjpeg)。

我见过将整个运行时分布在一个目录中的商业应用程序,所以我知道这是可以做到的。

问题是,有没有一种工具可以让这件事变得简单? Virtualenv 几乎可以让我到达那里,尤其是。使用 --no-site-packages 和 --relocatable 标志,但它不能解决标准“C”库的问题。例如,我希望能够构建一个 PIL,它使用捆绑的私有版本的 libjpeg 和 libpng

有什么建议吗?

【问题讨论】:

  • 这是供您自己使用还是要打包分发?有点不清楚。
  • 供我自己使用。理想情况下,我想要一个“便携式环境”,我可以在具有相同基本架构和操作系统的机器之间移动

标签: python virtualenv


【解决方案1】:

听起来您真正追求的是一种将特定 python 安装和脚本捆绑到可分发包中的方法。您可以执行以下操作:

  • 下载、编译并安装python到项目目录(即python-toolchain)
  • 创建一个前缀脚本(工具链),它将采用相对路径并动态更新PATHPYTHONPATHLD_LIBRARY_PATH
#!/bin/sh # 如果你聪明,你可以动态确定安装目录 prefix='安装目录' 工具链=$前缀/python-工具链 导出 PATH=$toolchain/bin:$prefix/app/bin:$PATH 导出 LD_LIBRARY_PATH=$toolchain/lib:$LD_LIBRARY_PATH 导出 PYTHONPATH=$prefix/app/lib:$PYTHONPATH 执行 $*
  • 您的应用脚本中的魔法 cookie 可能如下所示:
#!.../安装目录/toolchain python 打印“你好世界!”
  • 您现在应该可以像这样分发目录:
    • package/
      • python-toolchain/
      • app/

【讨论】:

    【解决方案2】:

    尝试 cx_Freeze 或 py2exe。它们用于打包 Python 应用程序以使其可再分发,并包含它所依赖的所有包/库。

    【讨论】:

    • 我一直在寻找一种方法来拥有一个可以安装在我使用的每台机器上的便携式开发环境,而不是用于分发的冻结系统。但也许这些打包程序也可以用来冻结开发环境......
    • 我明白了。在这种情况下,您可以尝试使用 setuptools 创建一个源代码分发包,并定义 install_requires,这样它将从 pypi 获取您需要的所有依赖项。之后,在另一台机器上创建开发环境只需将源下载到该机器并运行设置脚本即可。
    【解决方案3】:

    我已经成功使用py2exe。还有cx_Freeze

    更多建议请参见此处:

    关于此声明:

    没有链接回系统库

    您当然不能完全消除它需要一些系统库。例如,如果您想要一个 Windows 应用程序,则必须使用 Windows API。我假设您不想将整个 Windows 副本与您的应用程序捆绑在一起,以防万一他们没有安装 Windows....

    【讨论】:

    • 对。操作系统通常包含的东西。但是特定包使用的特殊库
    猜你喜欢
    • 2023-01-26
    • 1970-01-01
    • 2010-11-02
    • 2011-06-18
    • 2023-03-11
    • 2019-02-13
    • 2021-06-19
    • 1970-01-01
    • 2014-04-11
    相关资源
    最近更新 更多