如何在任何平台上安全地获得python3



我们有一堆python代码——我们有一种启动各种东西的bootstrap bash脚本——我们正试图设置一个指向python 3的python_bin变量。我试过了:

if [[ $( which python 2>/dev/null ) =~ /Python3 ]]; then
python_bin=python
elif which python3 >/dev/null 2>&1; then
python_bin=python3
else
python_bin=python
fi

但是在一些Windows机器上,它找不到正确的python,因为它在一些运行程序后面。在bash中是否有一种明确的方法可以在python和bash都安装在路径中的任何平台上运行python3 ?

基本上,我们希望有人能够克隆我们的存储库并运行setup.sh -并以一些新的和有趣的方式不断发现python安装不同的环境。

在bash中是否有明确的方法可以在python和bash都安装在路径中的任何平台上运行python3 ?

首先,你确定这足够吗?在PATH上的文件夹中可能有任意数量的Python安装。对于这个问题,您确定您的脚本即使在3.0下也能正确运行吗?

其次,不,你不能这样做在一个万无一失的方法。首先,Windows用户没有被强迫留下python.exe的名字。毕竟,Windows中没有任何东西依赖于它。Linux和Mac用户甚至有相同的自由系统以外的其他设施。另一方面,仅仅因为一个系统安装了Python并不意味着它有任何3。x安装。

(哦,您可能应该花一点时间来确保您了解虚拟环境是如何工作的,并对它们进行一些测试。根据平台和用户的首选项,这些可能复制基本Python环境或将其符号链接。然后是所有的替代实现:Jython, Pypy, IronPython....)

另一方面,2.7人处于EOL状态2年以上;它几乎和Windows 7一样老。您的用户应该期望任何新代码都满足3。无论如何,X——而且是一个相当最新的版本。现在3.6都是EOL了

一些windows盒子没有找到正确的python,因为它在一些运行程序后面"py"

请记住,如果你在Windows上使用Bash,那么你实际上是依赖于黑客的。如果可能的话,我建议编写一个单独的.bat版本的引导程序。

Windows的Python启动器存在,因为Windows没有内置的shebang行概念。并不是所有Windows用户都使用它。py的全部意义在于它绕过了PATH环境变量;py本身在路径上(通常在Windows安装目录中,用于全局安装),并且它维护自己的注册表。它这样做完全是为了支持更复杂的逻辑来选择可执行文件;使用PATH只能给你找到的第一个有效的东西。使用py的系统通常不会将任何已安装的Python安装放在PATH上,因为py会处理它。但是它们可以,而且谁知道哪一个会先被发现。

如果您真的想要坚持这种检测逻辑,尝试优先搜索py,如果py可用,则使用py -3。但是…

基本上,我们希望有人能够克隆我们的存储库并运行setup.sh -并不断以一些新的和有趣的方式发现python安装不同的环境。

您能做的最好的事情就是只写一个shebang行,在支持它的系统上为脚本设置可执行位,使用Bash脚本将这些可执行脚本作为脚本运行(而不是试图找到Python可执行文件),并且让用户对他们自己的环境变量负责。建立环境的人以奇怪的方式应该是负责理解古怪。我很欣赏尝试为那些可能不那么精通技术的人提供一个交钥匙解决方案的愿望——但是如果您的受众包括在Windows上安装Bash的那种人,那么至少有一些合理的技术熟练度保证。

在普通的Linux和Mac设置中,像#!/usr/bin/env python3这样的shebang应该给你默认的3。x Python在当前上下文中。这样的shebang也被py识别,它将以一种完全不同的方式解析它:.py文件扩展名被注册为由py运行;py看到了shebang并应用了一些正则;它看到该命令包含python3,并运行它注册为默认值3的Python。x安装。

最新更新