Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Linux中创建独立于系统的最小Python占用空间_Python_Linux_Portable Executable - Fatal编程技术网

在Linux中创建独立于系统的最小Python占用空间

在Linux中创建独立于系统的最小Python占用空间,python,linux,portable-executable,Python,Linux,Portable Executable,我的意图是尝试编译这样一个Linux-Python最小库,它是完全可移植的,并且与系统无关(这意味着它甚至根本不与系统安装的Python库交互) 它是在Windows下相对容易地完成的,除了Python二进制文件,以及由这个可移植的Python库加载的一组最小但自定义的模块 然而,对于我来说,在Linux下也很难达到这个目标,因为从头编译Python仍然会从系统(例如/usr/lib/python2.6)加载模块,而不是从它自己的lib子目录加载模块,一旦我将Python库移到别处,它就找不到模

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

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

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

如果可能的话,有没有一种方法可以将“python”编译成比我编译的版本更适合于基于Linux的发行版的可执行版本

编辑:实际上,当我尝试将python2.6(或仅python)移动到已经设置好的python库中时,问题就出现了(python库在Windows下正常工作,但它会输出
找不到与平台无关的库
找不到与平台相关的库
考虑在Linux下设置$PythOnHuto到[]:.< /代码>

据我所知,这可能与LIBDIR被设置为
(exec\u prefix)/lib/python$(VERSION)
有关,而不是我最近设置的
(exec\u prefix)/lib

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

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

注意:此安装的文件和文件夹结构不同于使用
--prefix
的普通Linux或Windows Python安装

,正如您自己建议的那样。我使用
--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仍然会从系统加载模块什么?如果这样做了,您做得不正确。我尝试使用--prefix标志来表示path进行配置,然后输入“make install”在那里“install”。但是,我不确定这是否会使编译后的Python安装减少对“prefix”路径文件夹的依赖性。对Python 2.6也进行了验证。当我重新编辑我的问题时,我达到了一个点,它首先以递归方式加载,然后以绝对方式(按路径名)加载但是,
python
倾向于从默认路径名的LIBDIR模块加载,而不是从Makefile中定义的路径名加载。