我的目的是尝试编译这样一个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安装不同
答案 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
。这是在编译中或之后没有做任何其他事情。