我有一个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不再理解该文件是什么。也许有人能解释一下为什么会这样。在
目前没有回答
相关问题 更多 >
编程相关推荐