在Linux中为Python设置不同的LIBDIR路径
我想改变在Linux下的Python 2.7加载模块/库的方式。我尝试从配置文件中进行更改。在此之前,它的路径是这样的:
BINLIBDEST= $(LIBDIR)/python$(VERSION) LIBDEST= $(SCRIPTDIR)/python$(VERSION) INCLUDEPY= $(INCLUDEDIR)/python$(VERSION) CONFINCLUDEPY= $(CONFINCLUDEDIR)/python$(VERSION) LIBP= $(LIBDIR)/python$(VERSION)
然后我试着把它改成这样:
BINLIBDEST= $(LIBDIR) LIBDEST= $(SCRIPTDIR) INCLUDEPY= $(INCLUDEDIR) CONFINCLUDEPY= $(CONFINCLUDEDIR) LIBP= $(LIBDIR)
主要是把路径中的python%(VERSION)去掉,这样它就不再从lib/python27加载模块,而是直接从lib文件夹加载。不过,即使我执行make和make install时没有问题,python或python27这个Python可执行文件还是没有从新的路径加载模块。它显示的输出是:
Could not find platform independent libraries <prefix> Could not find platform dependent libraries <exec_prefix> Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>] 'import site' failed; use -v for traceback
有没有办法强制Python可执行文件(如果必须的话)从我设置的新路径加载模块,而不是默认的"$(LIBDIR)/python$(VERSION)"路径呢?
3 个回答
我想感谢carlpett:我在运行时成功设置了Python的搜索路径:在用gcc 5.1构建Python 2.7.10时,把路径从lib/改成了lib64/,这是在x86_64-my_distro-gnu-linux上进行的,方法是修改Modules/getpath.c文件。
顺便说一下,我在配置时尝试过使用--libdir(这个方法对共享库有效,但对Python模块的安装路径无效),还修改了Makefile、pyconfig.h,调整了$PYTHONPATH和$PYTHONHOME,但都没有成功。
还有一个小细节,就是make install命令没有正确放置库文件,所以你得自己手动用cp -af和mv命令来处理一下。
谢谢你,CARLPETT!!!
你是不是想做一些 virtualenv 不能做到的事情呢?
看起来它其实是可以满足你的需求的:
“...主要的想法是不要使用系统自带的Python,而是有一个独立的、更加便携的Python版本,能够拥有自己的库和模块...”
你需要对Python的源代码做一些修改,然后重新编译,不过我想这对你来说应该没问题,因为这其实是个比较不常见的操作。
看看这个文件 Modules/getpath.c
。文件开头的注释详细说明了Python是如何确定库目录的。你可以在这个svn仓库里查看 这里。我觉得你应该关注一下这个定义是怎么用的:
#define PYTHONPATH PREFIX "/lib/python" VERSION ":" \
EXEC_PREFIX "/lib/python" VERSION "/lib-dynload"
我觉得光是把它改成 [...] PREFIX "/lib/:" [...]
可能不够简单,但大概是类似的思路。