在Linux中为Python使用不同的LIBDIR路径

2024-05-16 03:14:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想改变在Linux下的Python2.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。但是,即使启动makemake install能够处理这些更改,python27或python27二进制文件也不会从新路径加载模块。它会随着以下输出返回:

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)”?在


Tags: 模块路径prefixversionlibpython27libdirscriptdir
3条回答

您将不得不对python源代码做一些更改并重新编译,但我将假设这是可以的,因为这是一个非常非标准的事情。在

查看文件Modules/getpath.c。python确定libdir的步骤在文件开头的注释中有详细说明。你可以看看svn回购here。我想你应该看看这个定义是如何使用的:

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

我不认为把它改成[...] PREFIX "/lib/:" [...]那么容易,但它会沿着这些思路来做。在

你是想完成virtualenv做不到的事情吗?在

它似乎符合您的要求:

"...the main idea was not to work with the system-wide Python, but to have a separate, more of a portable version of Python to have its own libraries and modules.."

我要感谢carlpett:我能够在运行时设置python搜索路径:从lib/更改为lib/,同时使用gcc5.1构建python 2.7.10,方法是修改Modules/getpath.c。在

作为记录,我在配置时尝试了libdir(适用于共享库,但不适用于python模块的安装路径)、修改Makefile、修改pyconfig.h、调整$PYTHONPATH、$PYTHONHOME,什么都不起作用。在

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

谢谢CARLPETT!!!

相关问题 更多 >