Python shebang不强制其他版本[Mac]

时间:2014-05-05 00:10:36

标签: python macos

我是Python和编程的新手。 我正在尝试使用python.org中的python安装程序强制我的脚本使用Python3.4。

我的脚本有这个。

#!/usr/local/bin/python3.4
import sys
print(sys.version)
print("Hello, World!")

终端返回:

$ python pyscript.py
2.7.5 (default, Aug 25 2013, 00:04:04) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)]
Hello, World!
根据“哪个python3.4”

,shebang路径是正确的

5 个答案:

答案 0 :(得分:4)

通过在脚本上调用python,您将在路径中使用python。正如评论建议在设置执行位后直接运行文件。

答案 1 :(得分:2)

仅在使用此命令

直接运行脚本时才使用Shebang
$ ./pyscript.py

当您从命令行使用python解释器时,shell不会查询shebang行。它只是运行它在命令行上找到的第一个python可执行文件。

要更改默认的python可执行文件,请调整路径。或者更好的是使用python虚拟环境。有关虚拟环境的更多信息是here

答案 2 :(得分:1)

根据您的安装,可以在OS X上的多个位置安装python。

如果没有任何其他更改,您可能正在运行/usr/bin/python中的python。这可以通过输入which python

来验证
~ $ which python
/usr/bin/python

请注意,虽然/usr/local/bin/python3.4可能是python 3.4的正确路径,但当您键入python script.py时,您没有调用which python3.4时找到的命令。

要解决此问题,您可以执行以下操作之一:

  • 直接调用脚本。键入script.py(使用可执行位)而不是python script.py。您可能需要使用chmod u+x script.py将脚本的权限更改为可执行文件。
  • /usr/bin/python中的版本更改为您想要的版本。请注意,这可能非常危险因为其他需要2.7.5的基本安装python的事情可能会变得非常不开心
  • 更改$ PATH,将/usr/local/bin/放在/usr/bin之前,让/usr/local/bin/python中的python指向3.4版本。

答案 3 :(得分:0)

当您使文件可执行并直接运行时,shebang路径仅供操作系统使用,如下所示:

chmod 755 pyscript.py
./pyscript.py

对于python,shebang只是一个评论。即使直接在CLI上调用解释器,强制它的唯一方法是比较版本,如果不是使用os.execv或类似的重新启动它。这样的事情应该做(虽然没有经过测试):

#!/usr/local/bin/python3.4
import sys
import os
if (sys.hexversion < 0x3040000):
     sys.argv.insert(0, '/usr/local/bin/python3.4')
     os.execv(sys.argv[0], sys.argv)

print(sys.version)
print("Hello, World!")

您可能希望在shebang上使用env以避免指定路径,并避免在python代码上对路径进行硬编码...

答案 4 :(得分:0)

例如,在一个名为script.py的python脚本文件中,对于我来说,我在以下路径上有一个3.7 Python:

#! /Library/Frameworks/Python.framework/Versions/3.7/bin/python3

import sys

print("--- Python version ---")
print(sys.version)
print("--- Python version info ---")
print(sys.version_info)
print("--- Python path executable ---")
print(sys.executable)

正如其他人所说,授予权限并适当执行,以便可以应用shebang:

  1. 在终端中键入以下内容,以使script.py成为用户的可执行文件,即:
    $ chmod u+x script.py
  1. 在终端脚本中。py以./开头运行(不使用python):
    $ ./script.py

就我而言,我有:

--- Python version ---
3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 16:52:21) 
[Clang 6.0 (clang-600.0.57)]
--- Python version info ---
sys.version_info(major=3, minor=7, micro=3, releaselevel='final', serial=0)
--- Python path executable ---
/Library/Frameworks/Python.framework/Versions/3.7/bin/python3

注意事项:

  • shebang路径不能包含空格。
  • “ sheath路径可执行文件”不一定与shebang路径匹配,只要shebang路径上的python可以是“别名”即可。 Mac中的别名指向其他文件,您可以右键单击文件并选择“获取信息”以检查“原始”值。