关于在 shell 中使用 Python 脚本,人们应该了解什么?

关于在 shell 中使用 Python 脚本,人们应该了解什么?

我想知道人们通常应该了解什么Python(解释器)在 Linux 的 shell 中使用它时?这就是我所拥有的根图:

# ls -al /usr/bin/python*; file /usr/bin/python; /usr/bin/python-wrapper --version
lrwxrwxrwx 1 root root    14 Dec 26 04:49 /usr/bin/python -> python-wrapper
lrwxrwxrwx 1 root root     9 Dec 26 04:51 /usr/bin/python2 -> python2.7
-rwxr-xr-x 1 root root  6144 Jan  8 21:22 /usr/bin/python2.7
-rwxr-xr-x 1 root root  1450 Jan  8 21:22 /usr/bin/python2.7-config
lrwxrwxrwx 1 root root     9 Dec 26 04:49 /usr/bin/python3 -> python3.3
-rwxr-xr-x 1 root root 10304 Jan 19 20:37 /usr/bin/python3.3
-rwxr-xr-x 1 root root  1753 Jan 19 20:37 /usr/bin/python3.3-config
-rwxr-xr-x 1 root root   217 Dec 26 04:49 /usr/bin/python-config
lrwxrwxrwx 1 root root    16 Jan  8 21:22 /usr/bin/python-config-2.7 -> python2.7-config
lrwxrwxrwx 1 root root    16 Jan 19 20:37 /usr/bin/python-config-3.3 -> python3.3-config
-rwxr-xr-x 1 root root 10384 Dec 26 05:24 /usr/bin/python-wrapper
/usr/bin/python: symbolic link to `python-wrapper'
Python 3.3.3

所以就我而言,调用python启动了 3.3 版本。在我使用的大多数发行版上,安装了多个版本。而且最新版本不向后兼容,并且它的一些功能被向后移植到“旧”版本。我认为两个版本的情况是暂时的?现在,每次我需要运行 Python 脚本时,我都会尝试使用两个 Python 版本来确定。

我还应该知道有关在 shell 中使用 Python 运行脚本的其他信息吗?如果是这样,什么?有人制作了 python 脚本并env python在第一行使用,他/她是否意味着它应该与两个版本兼容? python 包装器有什么用处?

答案1

PEP 394指定如何安装 Python 以及在 shebang 行中使用什么内容。用于#!/usr/bin/env python2Python 2 脚本和#!/usr/bin/env python3Python 3 脚本(#!/usr/bin/env python如果您的脚本与两者兼容)。

在实践中,人们多年来一直#!/usr/bin/env python在 shebang 行中使用,因此如果您发现一个脚本需要python,很可能它是一个 Python 2 脚本。

由于Python 2和Python 3不兼容,两个版本将长期共存。它们是两种不同的语言,只是碰巧相似,但还没有达到与大多数程序兼容的程度。python目前大多数系统都保留Python 2,但Arch Linux已经切换python到Python 3;这种不一致就是 PEP 394 建议在 shebang 中使用显式版本的原因。不幸的是,因为生活并不简单,一些较旧的系统可能仍然没有python2(Debian wheezy 仅在危急时刻才获得它)。

请注意,虽然从语言设计者的角度来看“Python 2.x 是遗产,Python 3.x 是该语言的现在和未来”,但仍然存在大量的 Python 2 代码。从使用第三方库的人的角度来看(丰富的第三方库是Python的优点之一),现在是Python 2。

至于python-wrapper,它是一个包装器在 Python 实现之间进行选择。这是昨天的包装纸;今天的包装是python-exec。我不知道他们在做什么。

答案2

简短的回答:使用Python 3!说真的,这太棒了!我希望所有发行版都将 Python 3 作为默认版本。

在不了解程序的用户以及使用哪些库的情况下,很难回答是否应该使用 Python 2 还是 Python 3 的问题。让它同时适用于两者的实践是很好的练习。

如果存在以下情况之一,请使用 Python 2:

  1. 您使用尚未移植的库。需要 Python 2 的库已经不多了。
  2. 您的部署目标或客户仍然坚持使用 Python 2。

如需更深入的答案,请参阅Python 维基关于这个问题的网页

该行#!/usr/bin/env python(如另一个答案所述)查找$PATH. Virtualenvs 在隔离项目和 Python 安装方面非常流行,所以我使用#!/usr/bin/env python而不是 simple#!/usr/bin/python来让我的 virtualenvs 工作。 Python 在线文档仅在一个地方并准确地使用这个调用。听起来您的项目可能需要一个包含 Python 2 解释器的 virtualenv。这个#!/usr/bin/env问题已经讨论过这里这里

答案3

当有人#!/usr/bin/env python在第一行中使用时,他/她意味着运行脚本的解释器是在 中找到的第一个解释器$PATH,他们不认为脚本与两个版本兼容。

如果你想指定脚本中使用的Python版本,你可以这样做:

#!/usr/bin/env python2.7

或者

#!/usr/bin/env python3.3

相关内容