Python freeze.py生成的bin不运行

时间:2011-06-26 20:07:59

标签: python binary freeze shared-libraries

我需要将Python 2.7脚本运行到客户端关键机器中,所以我有权安装任何东西,当我什么都不说时我甚至没有意思到本地目录,所以我找到的解决方案就是将脚本传递给他使用包含电池的工具“freeze.py”创建的二进制文件http://wiki.python.org/moin/Freeze,我还将必需和不可记录的.so库添加到同一个文件夹(_io.so,_heapd.so,...)并给它们可执行的permisions。

但是当我尝试执行二进制文件时,我得到了:

Traceback (most recent call last):
  File "/usr/lib/python2.7/site.py", line 562, in <module>
  File "/usr/lib/python2.7/site.py", line 544, in main
  File "/usr/lib/python2.7/site.py", line 271, in addusersitepackages
  File "/usr/lib/python2.7/site.py", line 246, in getusersitepackages
  File "/usr/lib/python2.7/site.py", line 236, in getuserbase
  File "/usr/lib/python2.7/sysconfig.py", line 558, in get_config_var
  File "/usr/lib/python2.7/sysconfig.py", line 457, in get_config_vars
  File "/usr/lib/python2.7/sysconfig.py", line 310, in _init_posix
IOError: invalid Python installation: unable to open /usr/lib/python2.7/config/Makefile (No such file or directory)

我猜它试图在默认的Python 2.7中找到一些代码,但这很荒谬,因为冻结的目标是可以执行到没有Python的环境中,来自文档:

  

如果你想编写Python,但是你   不知道你的客户是否有Python   安装,使用这个!

那么......我到底做错了什么?

P.S。:我尝试使用hello.py示例并导致同样的错误,这个工具是否过时了?

1 个答案:

答案 0 :(得分:3)

我从源包中修补了Python-2.7.2 / Tools / freeze / makefreeze.py,如下所示:

--- orig/Python-2.7.2/Tools/freeze/makefreeze.py    2011-06-11 17:46:28.000000000 +0200
+++ 2.7.2/Python-2.7.2/Tools/freeze/makefreeze.py   2011-11-15 18:18:33.632177119 +0100
@@ -23,6 +23,7 @@
 """ + ((not __debug__ and """
         Py_OptimizeFlag++;
 """) or "")  + """
+        Py_NoSiteFlag = 1;
         PyImport_FrozenModules = _PyImport_FrozenModules;
         return Py_FrozenMain(argc, argv);
 }

- &GT;我将Py_NoSiteFlag = 1;添加到了冻结的main()中,因此启动时python解释器的隐式import site将被禁用。