在Python2.7.12上执行pants builded PEX时出错

2024-10-04 11:23:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python PEX,使用Pants 1.0.1构建。这个PEX是一个可以工作的python应用程序,直到使用python2.7.12发布ubuntu16.04和fedora24。现在我得到一个错误,表明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

嗯。zip文件嵌入在.pex文件中,因此文件中自然会有非ascii字符。在

阅读错误消息中的链接,它说我可以在文件的顶部放置一个编码,但是,我不认为有一个编码可以解决这个问题,是吗?在

我现在不知道该怎么办。在我看来,python2.7.12破坏了PEX。裤子有更新吗?有什么我可以添加到pex文件来解决这个问题吗?在

编辑

更多的信息。我不知道为什么这最后会很重要,但看起来确实如此。在构建PEX文件之后,我对它进行了一些修改。我将文件顶部的shebang从python2.7更改为python。我希望能够在python2.6和2.7版本上运行相同的PEX,这取决于它需要运行的各种发行版的可用版本。如果我不去管它,就像python2.7一样,它在python2.7.12上运行得很好。如果我改变它,它就不再工作了。ubuntu16.04上的默认python仍然是python2.7,那么为什么将python2.7更改为python会有所不同呢?在

更多信息

如果我解压PEX,我就可以执行这个目录,而且我希望这样做。所以我删除了PEX文件的第一行,它有#!在里面,剩下的是拉链。我将压缩包解压缩到一个名为unzipped的目录中。然后我可以毫无问题地执行python unzipped。所以源文件本身的编码似乎不是问题。我不能直接执行压缩。我在运行python unzipped.pyz时也遇到同样的错误。在

我的解决方案

所以我的问题没有好的答案。由于我修改了得到的PEX,删除了python2.7需求并将其更改为python,允许它根据发行版在python2.6或2.7上运行,所以我发现是PEX的修改导致了这个问题。所以我使用了两个PEX文件,一个用于python2.7,另一个用于python2.6。在

最后,我不明白为什么仅仅触摸PEX顶部的#!会导致python不再理解该文件是什么。也许有人能解释一下为什么会这样。在


Tags: 文件py版本目录信息应用程序编码错误