Ошибка при выполнении штанов, построенных PEX на Python 2.7.12
У меня есть Python PEX, построенный с использованием Pants 1.0.1. Этот PEX является рабочим приложением Python, вплоть до выпуска Ubuntu 16.04 и Fedora 24 с использованием Python 2.7.12. Теперь я получаю сообщение об ошибке, указывающее, что кодировка PEX-файла плохая:
$ ./ainfo_py.pex
File "./ainfo_py.pex", line 2
SyntaxError: Non-ASCII character '\xe4' in file ./ainfo_py.pex on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
Duh. Zip-файл встроен в.pex-файл, поэтому, естественно, в нем будут символы не ascii.
Читая ссылку в сообщении об ошибке, он говорит, что я могу поместить кодировку в начало файла, однако я не думаю, что есть кодировка, которая бы это исправила, не так ли?
Я не уверен, что делать в этот момент. Мне кажется, что Python 2.7.12 сломал PEX. Есть ли обновление штанов, которое исправляет это? Что-то, что я могу добавить к файлу pex, чтобы это исправить?
редактировать
Еще немного информации. Я не уверен, почему это оказывается важным, но кажется, что это так. Я немного изменяю файл PEX после его сборки. Я изменяю Шебанг в верхней части файла с python2.7
в python
, Я хочу иметь возможность запускать один и тот же PEX на обеих версиях Python 2.6 и 2.7, основываясь на любой версии, доступной в различных дистрибутивах, на которых нужно работать. Похоже, что если я оставлю это в покое, как python2.7
он отлично работает на Python 2.7.12. Если я изменю это, это больше не работает. Python по умолчанию в Ubuntu 16.04 по-прежнему Python 2.7, так почему бы изменить python2.7
в python
Сделать разницу?
Дополнительная информация
Если я разархивирую PEX, я могу выполнить каталог, и я ожидал бы. Поэтому я удаляю первую строку PEX-файла, которая имеет #! в этом, остальное - почтовый индекс. Я распаковываю zip в каталог с именем unzipped. Я могу тогда выполнить python unzipped
без проблем. Таким образом, кодирование самих исходных файлов не является проблемой. Я не могу выполнить почтовый индекс напрямую. Я получаю ту же ошибку при запуске python unzipped.pyz
,
Мое решение
Так что здесь нет действительно хорошего ответа на мою проблему. Так как я изменяю полученный PEX, чтобы удалить python2.7
требование и изменить его на python
Чтобы позволить ему работать на Python 2.6 или 2.7 в зависимости от дистрибутива, я обнаружил, что это модификация PEX, которая вызывает проблему. Поэтому я прибег к созданию 2 файлов PEX, одного для python 2.7 и другого для python 2.6.
В конце концов, я не понимаю, почему просто касаясь #!
в верхней части PEX Python больше не понимает, что это за файл. Может быть, кто-то может пролить свет на то, почему это так.