我想改变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)“?
答案 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。
谢天谢地!!!