我需要在客户端关键机器上运行Python 2.7脚本,所以我有权安装任何东西,当我什么也没说时,我什至没有在本地目录中安装任何东西,所以我找到的解决方案是将脚本传递给他使用包含电池的工具“freeze.py”创建的二进制文件 http://wiki.python.org/moin/Freeze ,我还将必需的和不可嵌入的 .so 库添加到同一文件夹(_io.so、_heapd.so,...)中,并授予它们可执行权限。
但是当我尝试执行二进制文件时,我得到:
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 中找到一些代码,但这是荒谬的,因为 freeze 的目标是在没有 Python 的环境中可执行,来自文档:
If you want to write Python, but you don't know if your clients have Python installed, use this!
所以...我到底做错了什么?
P.S.:我尝试使用 hello.py 示例并导致相同的错误,这个工具肯定已经过时了吗?
最佳答案
我从源包中修补了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);
}
-> 我将 Py_NoSiteFlag = 1;
添加到卡住的 main(),因此启动时 python 解释器的隐式导入站点
将被禁用。
弗兰克
关于Python freeze.py生成的bin无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6486414/