在Linux中为Python提供不同的LIBDIR路径

时间:2011-07-18 10:04:52

标签: python linux configure

我想改变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 文件夹加载其模块,而不是 lib / python27 。但是,即使启动 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) )/蟒$(VERSION)“?

3 个答案:

答案 0 :(得分:1)

你必须对python源进行一些更改并重新编译,但我会假设这没关系,因为这是一个非常非标准的事情。

查看文件Modules/getpath.c。 python执行以确定libdir的步骤在文件开头的注释中详细说明。你可以看一下svn repo here。我想你会想看看如何使用这个定义:

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

我认为它不会像将其更改为[...] PREFIX "/lib/:" [...]一样简单,但它会是这样的。

答案 1 :(得分:0)

您是否正在尝试完成virtualenv不做的事情?

它似乎符合您的要求:

  

“......主要思想不是使用系统范围的Python,而是使用   有一个单独的,更多的可移植版本的Python有自己的   图书馆和模块..“

答案 2 :(得分:0)

我要感谢carlpett:我能够在运行时设置python搜索路径:在构建Python 2.7时从 lib / 更改为 lib64 / 。 10使用gcc 5.1 x86_64-my_distro-gnu-linux 修改Modules / getpath.c

为了记录,我在配置时尝试了--libdir(适用于共享库但不适用于python模块安装路径),修改Makefile,修改pyconfig.h,调整$ PYTHONPATH,$ PYTHONHOME,没有任何效果。

只是一个细节,但make install没有正确放置库,所以你必须自己做一点cp -af和mv。

谢天谢地!!!