Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
#!/垃圾箱/垃圾箱vs#/可执行文件中的usr/local/bin/python_Python_Bash_Shell_Shebang - Fatal编程技术网

#!/垃圾箱/垃圾箱vs#/可执行文件中的usr/local/bin/python

#!/垃圾箱/垃圾箱vs#/可执行文件中的usr/local/bin/python,python,bash,shell,shebang,Python,Bash,Shell,Shebang,在pip程序中,She-bang是 #!/usr/local/bin/python if __name__ == "__main__": # Python program body 在Python启动器提供的安装Certificates.command中: #/垃圾箱/垃圾箱 /Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6在上有一个行长度限制行。也许他们这样做是为了逃避现实 选项是指向程序的路径,但仅当它

pip
程序中,She-bang是

#!/usr/local/bin/python

if __name__ == "__main__":
    # Python program body
在Python启动器提供的
安装Certificates.command
中:

#/垃圾箱/垃圾箱

/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6在
上有一个行长度限制行。也许他们这样做是为了逃避现实


选项是指向程序的路径,但仅当它足够短时。使用使用路径的
env python
。或者像这样的链式装载。

#上有一个行长度限制行。也许他们这样做是为了逃避现实


选项是指向程序的路径,但仅当它足够短时。使用使用路径的
env python
。或者像这样的链式加载。

在一般情况下,您只需指定实际需要的解释器

除此之外,您有时会将这种变通方法视为可移植性问题。在POSIX系统上,
/usr/bin/env
很好地涵盖了大多数场景;但是,如果您需要可移植到较旧的或其他特殊的系统,那么回到最低公分母,然后逐步恢复到可以可靠运行的位置,例如Python在各种系统上可能需要各种不明显的构造。(丹D.的回答是一个很好的例子。)

也有一些情况下,您希望
sh
设置一些内容(例如,获取在使用
sh
语法的文件中指定的一些环境变量),然后设置Python

#!/bin/sh
# source some variables
. /etc/defaults/myenv.sh
# Then run Python
exec env python -c '
# ... Your Python script here
    ' "$@"

在一般情况下,您只需要指定实际需要的解释器

除此之外,您有时会将这种变通方法视为可移植性问题。在POSIX系统上,
/usr/bin/env
很好地涵盖了大多数场景;但是,如果您需要可移植到较旧的或其他特殊的系统,那么回到最低公分母,然后逐步恢复到可以可靠运行的位置,例如Python在各种系统上可能需要各种不明显的构造。(丹D.的回答是一个很好的例子。)

也有一些情况下,您希望
sh
设置一些内容(例如,获取在使用
sh
语法的文件中指定的一些环境变量),然后设置Python

#!/bin/sh
# source some variables
. /etc/defaults/myenv.sh
# Then run Python
exec env python -c '
# ... Your Python script here
    ' "$@"

Python中引入了
安装Certificates.command
脚本的特定代码。据我所知,作者还没有解释他为什么这样写代码

请注意,
.command
文件是Mac OS X上的Shell脚本,可以通过在Finder中双击它们来执行

我相信可能的解释是,作者只是想尊重MacOSX的期望,
.command
文件应该是Shell脚本

您可以通过将以下内容放在文件
~/Desktop/test.command
中进行测试:

#!/usr/bin/env python
print "Hello world"
然后在Finder中查看桌面文件夹,注意它报告为“shell”文件:

(虽然它被错误地报告为Shell文件,但这个Python脚本仍然可以通过双击来执行。它不会破坏Finder或任何东西。)

为了回答这个特定的问题,选择这种模式的一个原因可能是,正如Dan D.所说,为了避免Shebang线限制


通常,您更愿意使用
#/usr/bin/env python
作为您的Shebang行。创建Bash(即
python3.6此
Install Certificates.command
脚本的特定代码是在Python中引入的。据我所知,作者没有解释他为什么以这种方式编写代码

请注意,
.command
文件是Mac OS X上的Shell脚本,可以通过在Finder中双击它们来执行

我相信可能的解释是,作者只是想尊重MacOSX的期望,
.command
文件应该是Shell脚本

您可以通过将以下内容放在文件
~/Desktop/test.command
中进行测试:

#!/usr/bin/env python
print "Hello world"
然后在Finder中查看桌面文件夹,注意它报告为“shell”文件:

(虽然它被错误地报告为Shell文件,但这个Python脚本仍然可以通过双击来执行。它不会破坏Finder或任何东西。)

为了回答这个特定的问题,选择这种模式的一个原因可能是,正如Dan D.所说,为了避免Shebang线限制


通常,您更愿意使用
#!/usr/bin/env python
作为Shebang行。创建Bash(也就是说,
python3.6你确定吗?我刚刚测试了它,发现Mac OS X上shebang的行限制是511个字符。它是127个字符。但它们都不接近这两个限制。@Alexarvey我不能。我们不知道路径中的省略号有多长。但可能该文件的作者认为限制要低得多,并确实如此。)在使用变通方法之前,不必费心测试。或者,在某些需要支持的系统上,Python的真正路径可能更长。一个“一刀切”的解决方案解决方案将更易于调试、维护和记录。我的MBP上有多个pip版本,我能找到的较长版本是
#!/Library/Frameworks/Python.framework/versions/3.6/bin/python3.6
,它已经很长了。但它只有65个字符。即使行限制是127,也很难达到双t这条路径的长度。这是在用python 3.6安装pip时默认设置的。所以我不知道这是否是原因。@tripleee,仅供参考源代码参考是和。这段代码似乎只存在于制作Mac OS X DMG软件包的过程中。我猜正如建议的,作者只是不知道shebang行限制是什么?令人费解的代码!你确定吗?我刚刚测试了一下,发现Mac OS X上shebang的行限制是511个字符,是127个