为Linux创建可移植Python(本地安装)

Nic*_*ick 12 python django portability virtualenv

我想创建以下内容:

可以在任何系统上运行的python的可移植版本(使用任何以前版本的python或者没有安装python)并且预先配置了各种python包(例如,django,lxml,pysqlite等)

我发现上面最接近的是virtualenv,但这只是到目前为止.

如果我在一台机器上为python打包一个很好的virtualenv,它包含了它需要的许多库的sym链接.我可以把那些sym链接转换成他们的实际文件,但是如果我尝试将整个目录移动到另一台机器,我会在seg故障后得到seg故障.

要在另一台机器上启动python,我正在使用:

LD_LIBRARY_PATH=lib/ ./bin/python
Run Code Online (Sandbox Code Playgroud)

在lib /我有我从原始机器复制的所有共享库.这里的问题是这些共享库可能依赖于我不包括的其他共享库,因此在其他Linux发行版上执行此操作不起作用.可能是由于它回退到系统上安装的旧共享库,这些库不能与我复制的内容一起使用.

任何人都知道如何使这个工作?这甚至可能吗?

编辑:

为了澄清,期望的结果是创建一个python二进制文件的tar.gz和相关的包(django,lxml,pysqlite等),可以在任何基于Linux的系统上提取和运行,即(ubuntu 8.04,redhat 5,suse) 11等),所有32位发行版,其中本地安装的python版本不会影响tar.gz中的内容.

jdi*_*jdi 7

我不知道这怎么可能.如果是的话,他们不需要为不同的平台分发python的二进制包.你不能简单地分发将在任何平台上运行的python.它必须从该拱门的源头构建.Virtualenv希望你告诉它使用哪个系统python(使用链接).

这几乎适用于任何链接系统库的二进制包.同样,如果可能,我们将不需要任何特定于平台的二进制分发.

但是,您可以实现您想要的一部分.也就是说,在另一台没有安装python的机器上运行python,只要它是同一个arch.这与冻结背后的概念相同,或py2exe/py2app/pyinstaller.解释器捆绑在一个独立的环境中.所以应用程序可以在任何类似的平台上运行.

编辑

我刚刚意识到,虽然你的问题在谈论"系统"时,你的标题包含引用"linux".Linux有不同的风格,所以为了使它工作,你必须为多个arch构建它,并且还完全包含独立链接.您可以尝试使用pyinstaller构建一个包,并使用它包含在您的项目中.

你可以尝试在你的virtualenv中从源代码构建python:

$ ./configure --prefix=/path/to/virtualenv && make && make install
Run Code Online (Sandbox Code Playgroud)

如果您仍然遇到libs链接问题,您还可以调查静态构建它


tah*_*hoe 7

我刚测试了这个并且效果很好.

获取要安装的python副本并解压缩并首先cd到untarred文件夹.

还可以获得setuptools的副本并解压缩.

/opt/portapy 下面使用的当然只是我为这篇文章提出的名称,它可以是任何路径,并且应该涂焦完整路径,并且由于绝对路径链接,应该在任何系统上使用相同的路径.

mkdir /opt/portapy
cd <python source dir>
./configure --prefix=/opt/portapy && make && make install
cd <setuptools source dir>
/opt/portapy/bin/python ./setup.py install
Run Code Online (Sandbox Code Playgroud)

在portapy文件夹中创建虚拟env文件夹.

mkdir /opt/portapy/virtenv
/opt/portapy/bin/virtualenv /opt/portapy/virtenv
cd /opt/portapy/virtenv
source bin/activate
Run Code Online (Sandbox Code Playgroud)

完成.您已准备好在此安装所有库,并可选择以这种方式创建多个虚拟环境.

然后,您可以将整个/opt/portapy文件夹放在一起并将其传输到同一个arch的任何Linux系统,这是我怀疑的原因.

我编译2.7.5 ond centOS 5.8 64bit并将文件夹移动到Cent6.9系统,它运行完美.