【问题标题】:Creating a system-independent minimal Python footprint in Linux在 Linux 中创建独立于系统的最小 Python 占用空间
【发布时间】:2011-01-31 18:52:15
【问题描述】:

我的目的是尝试编译这样一个 Linux Python 最小基础,它是完全可移植的,并且与系统无关(这意味着它甚至根本不与系统安装的 Python 基础交互)。

它在 Windows 下相对容易完成,除了 Python 二进制文件和一组最小但自定义的模块,这些模块正在由这个可移植的 Python 库加载。

然而,我在 Linux 下也很难达到这个目标,因为从头开始编译 Python 仍然会从系统(例如 /usr/lib/python2.6)加载模块,而不是从它自己的 Lib 子目录,一旦我将这个 Python 基础移到别处,它就找不到它。

如果可能的话,有没有一种方法可以将“python”编译为可用于更多基于 Linux 的发行版,而不是我编译的发行版?

编辑:实际上,当我尝试将 python2.6(或只是 python)移动到已经设置好的 Python 基础(在 Windows 下正常工作,但它输出
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>] under Linux instead.

据我所知,这可能与将 LIBDIR 设置为 (exec_prefix)/lib/python$(VERSION) 而不是我最近设置的 (exec_prefix)/lib 有关。

有没有办法定义要读取的文件夹和文件,而不是默认的? Makefile 正确处理它(make 和 make install 将其放入正确的 lib 文件夹中)。但是当使用 farfromhome 的print pth 方法时,它仍然倾向于从/home/arnold/Python/lib/python2.6 而不是/home/arnold/Python/lib 加载。

有没有办法强制python 加载自定义 LIBDIR 路径而不是默认路径?

注意:此安装的文件和文件夹结构与普通 Linux 或 Windows Python 安装不同

【问题讨论】:

  • 从头开始编译 Python 仍然会从系统中加载模块什么?如果是这样,你就做得不对。
  • 我尝试使用 --prefix 标志来指示要配置的路径,然后输入“make install”以在此处“安装”它。但是,我不确定这是否会使编译后的 Python 安装减少对“前缀”路径文件夹的依赖。

标签: python linux portable-executable


【解决方案1】:

按照您自己的建议使用--prefix。我使用--prefix=/usr/local 编译了 Python 2.7.1,并运行生成的二进制结果:

Python 2.7.1 (r271:86832, Jan 31 2011, 11:06:01) 
[GCC 4.5.1 20100924 (Red Hat 4.5.1-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> for pth in sys.path:
...     print pth
... 

/usr/local/lib/python27.zip
/usr/local/lib/python2.7
/usr/local/lib/python2.7/plat-linux2
/usr/local/lib/python2.7/lib-tk
/usr/local/lib/python2.7/lib-old
/usr/local/lib/python2.7/lib-dynload
/usr/local/lib/python2.7/site-packages

请注意,没有对/usr/lib 的单一引用,只有/usr/local/lib。这是在编译中或之后没有做任何其他事情。

【讨论】:

  • 也已针对 Python 2.6 进行了验证。
  • 当我重新编辑我的问题时,我到达了一个点,它首先递归地加载它,然后绝对地(通过路径名)。但是,python 倾向于从默认路径名的 LIBDIR 模块加载,而不是从 Makefile 中定义的路径名加载。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 2011-04-22
相关资源
最近更新 更多