在Linux中创建独立于系统的最小Python占用空间

时间:2011-01-31 18:52:15

标签: python linux portable-executable

我的目的是尝试编译这样一个Linux Python最小基础,它是完全可移植的,并且与系统无关(意味着它甚至根本不与系统安装的Python基础交互)。

在Windows下相对容易完成,只有Python二进制文件,以及由这个可移植的Python库加载的最小但自定义的模块集。

但是,我很难在Linux下实现这个目标,因为从头编译Python仍然会从系统加载模块(例如/usr/lib/python2.6),而不是从它自己的Lib子目录加载,一旦我把这个Python基地移到其他地方,它就找不到它了。

如果有可能的话,有没有办法将'python'编译为可执行更多基于Linux的发行版,而不是编译成的?

编辑:实际上,当我尝试将python2.6(或者只是python)移动到已经设置好的Python基础(它在Windows下应该正常工作,但是它输出
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>] under Linux instead.

据我所知,它可能与LIBDIR被设置为(exec_prefix)/lib/python$(VERSION)而不是我最近设置的(exec_prefix)/lib有关。

有没有办法定义要读取的文件夹和文件,而不是默认的? Makefile正确处理它(make和make install将它放到正确的lib文件夹中)。但是当使用farfromhome的print pth方法时,它仍然倾向于从/home/arnold/Python/lib/python2.6而不是/home/arnold/Python/lib加载。

有没有办法强制python加载自定义LIBDIR路径而不是默认路径?

注意:此安装的文件和文件夹结构与库存Linux或Windows Python安装不同

1 个答案:

答案 0 :(得分:2)

自己使用--prefix建议的作品。我使用--prefix=/usr/local编译了Python 2.7.1,并运行生成的二进制结果:

Python 2.7.1 (r271:86832, Jan 31 2011, 11:06:01) 
[GCC 4.5.1 20100924 (Red Hat 4.5.1-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> for pth in sys.path:
...     print pth
... 

/usr/local/lib/python27.zip
/usr/local/lib/python2.7
/usr/local/lib/python2.7/plat-linux2
/usr/local/lib/python2.7/lib-tk
/usr/local/lib/python2.7/lib-old
/usr/local/lib/python2.7/lib-dynload
/usr/local/lib/python2.7/site-packages

请注意,/usr/lib没有一个引用,只有/usr/local/lib。这是在编译中或之后没有做任何其他事情。