如何创建私有、自包含的Python环境?

18 投票
3 回答
9614 浏览
提问于 2025-04-16 09:33

我想创建一个私有的、独立的Python环境,这个环境不依赖于系统库(就像virtualenv那样),而且还要包含自己的标准C/C++库版本,以便给那些只是包装了这些库的Python包使用(比如PIL和libjpeg)。

我见过一些商业应用,它们会把整个运行环境放在一个目录里,所以我知道这是可以做到的。

我的问题是,有没有什么工具可以让这个过程变得简单?Virtualenv差不多能满足我的需求,特别是使用了--no-site-packages和--relocatable这两个选项,但它并不能解决标准"C"库的问题。我想要能够构建一个PIL,比如说,使用捆绑的私有版本的libjpeg和libpng。

有没有什么建议?

3 个回答

1

可以试试 cx_Freeze 或者 py2exe。这些工具是用来打包 Python 应用程序的,目的是让它们可以被别人使用,并且会把所有需要的包和库都包含进去。

1

我之前成功使用过 py2exe。还有一个叫 cx_Freeze 的工具。

这里还有更多建议可以参考:

关于这句话:

这并不链接到系统库

当然,你不能完全消除它需要一些系统库的可能性。比如说,如果你想做一个Windows应用程序,它就必须使用Windows的API。我想你也不想把整个Windows系统打包进你的应用里,以防用户没有安装Windows吧……

6

听起来你真正想要的是把一个特定的Python安装和脚本打包成一个可以分发的包。你可以按照以下步骤操作:

  • 下载、编译并把Python安装到一个项目目录里,比如叫做 python-toolchain
  • 创建一个前缀脚本 (toolchain),这个脚本会根据相对路径动态更新 PATHPYTHONPATHLD_LIBRARY_PATH
#!/bin/sh

# If your clever you can determine install directory dynamically
prefix='install directory'
toolchain=$prefix/python-toolchain
export PATH=$toolchain/bin:$prefix/app/bin:$PATH
export LD_LIBRARY_PATH=$toolchain/lib:$LD_LIBRARY_PATH
export PYTHONPATH=$prefix/app/lib:$PYTHONPATH
exec $*
  • 你应用脚本中的魔法代码可以像这样:
#!.../install directory/toolchain python

print "Hello World!"
  • 现在你应该能够分发一个像这样的目录:
    • package/
      • python-toolchain/
      • app/

撰写回答