在Linux中为Python设置不同的LIBDIR路径

0 投票
3 回答
4868 浏览
提问于 2025-04-16 21:45

我想改变在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文件夹加载。不过,即使我执行makemake install时没有问题,pythonpython27这个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 个回答

0

我想感谢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!!!

0

你是不是想做一些 virtualenv 不能做到的事情呢?

看起来它其实是可以满足你的需求的:

“...主要的想法是不要使用系统自带的Python,而是有一个独立的、更加便携的Python版本,能够拥有自己的库和模块...”

1

你需要对Python的源代码做一些修改,然后重新编译,不过我想这对你来说应该没问题,因为这其实是个比较不常见的操作。

看看这个文件 Modules/getpath.c。文件开头的注释详细说明了Python是如何确定库目录的。你可以在这个svn仓库里查看 这里。我觉得你应该关注一下这个定义是怎么用的:

#define PYTHONPATH PREFIX "/lib/python" VERSION ":" \
          EXEC_PREFIX "/lib/python" VERSION "/lib-dynload"

我觉得光是把它改成 [...] PREFIX "/lib/:" [...] 可能不够简单,但大概是类似的思路。

撰写回答