Созданный Python freeze.py не запускается - PullRequest
2 голосов
/ 27 июня 2011

Мне нужно запустить скрипт 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, из документов:

Если вы хотите написать Python, но не знаете, установлен ли Python на ваших клиентах, используйте это!

Итак ... что, черт возьми, я делаю неправильно?

PS: я попытался с примером hello.py и выдает ту же ошибку, этот инструмент определенно устарел?

1 Ответ

3 голосов
/ 17 ноября 2011

Я установил 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 (), поэтомунеявный import site интерпретатора python при запуске будет отключен.

Frank

...