我需要将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示例并导致同样的错误,这个工具是否过时了?
答案 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
将被禁用。
谢