我想知道人们通常应该了解什么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 python2
Python 2 脚本和#!/usr/bin/env python3
Python 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:
- 您使用尚未移植的库。需要 Python 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