我是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路径是正确的
答案 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的事情可能会变得非常不开心 /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:
$ chmod u+x script.py
$ ./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
注意事项: