Python 3.7 带来的 Bug
我很喜欢尝鲜,无论是生活上的,还是电脑上正在使用的内容。当然了,伴随着新事物的新特性,必然会带来很多奇奇怪怪的 bug。
Python 3.7 不能再使用 async 作为关键词
先看两个例子吧:
Python 3.6.6 (default, Aug 3 2018, 18:10:32)
[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.10.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> async = ""
>>> async
''
Python 3.7.0 (default, Aug 13 2018, 03:32:41)
[Clang 10.0.0 (clang-1000.10.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> async = ""
File "<stdin>", line 1
async = ""
^
SyntaxError: invalid syntax
我相信,绝大多数情况下,这条不会对你产生任何影响,只要你不把 async 作为关键词。
不过,这个就苦了用 Tensorflow 的家伙了呢。问题是这样的,Tensorflow 中使用了 async 作为关键词,而且,这其中的部分代码还是 C/C++ 生成的…于是,无论你是从源码编译新的 Tensorflow,还是直接使用某个 whl 安装,在最终使用的时候,都会失败。(我才不会说当时,这个问题坑了我好久,还以为是我哪里的 cython 写错了!
好在,已经慢慢解决了。具体看这些 commit.
Sample:
tensorflow::Status CreateRemoteContexts(
const std::vector<string>& remote_workers, int64 rendezvous_id,
const tensorflow::ServerDef& server_def,
tensorflow::eager::EagerClientCache* remote_eager_workers, bool async,
tensorflow::eager::EagerClientCache* remote_eager_workers, bool is_async,
解决方案:用 pyenv
吧!
Jedi 的补全
这个问题是我在使用 Emacs 时遇到的。当时,无论是 Emacs 的 lsp-mode
还是 anaconda-mode
甚至是 elpy
都遇到了一个问题,补全的时候,只要我定义函数的时候,加上了 type hinting,就不会出现。在我尝试了很多之后,终于意识到这个是 jedi 的问题: issue/1198.
(我当时认为是 Emacs 的问题,还在 emacs-china 提了个问 QUESTION,真是感想热心群众的帮忙呢。
解决方案:用 pyenv
吧!
嘛,其实,说了这么多,我想说的就是,遇到 python 的版本的问题,别犹豫,用 pyenv 吧!