Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.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
Python脚本的可移植exe包装器。在什么情况下,我的解决方案不起作用?_Python_Bash_Cmd - Fatal编程技术网

Python脚本的可移植exe包装器。在什么情况下,我的解决方案不起作用?

Python脚本的可移植exe包装器。在什么情况下,我的解决方案不起作用?,python,bash,cmd,Python,Bash,Cmd,我为Python 2和3脚本提供了以下包装: 对于类Unix系统: #!/bin/sh SCRIPTDIR="$(cd "$(dirname "$0")" && pwd)" /usr/bin/env python2.7 "$SCRIPTDIR/program27.py" "$@" #!/bin/sh SCRIPTDIR="$(cd "$(dirname "$0")" && pwd)" /usr/bin/env python3 "$SCRIPTDIR/progra

我为Python 2和3脚本提供了以下包装:

对于类Unix系统:

#!/bin/sh
SCRIPTDIR="$(cd "$(dirname "$0")" && pwd)"
/usr/bin/env python2.7 "$SCRIPTDIR/program27.py" "$@"

#!/bin/sh
SCRIPTDIR="$(cd "$(dirname "$0")" && pwd)"
/usr/bin/env python3 "$SCRIPTDIR/program34.py" "$@"
对于Windows:

@py -2 "%~dp0\program27.py" %*

@py -3 "%~dp0\program34.py" %*
脚本是严格的命令行工具,它们始终与包装器放在同一个目录中。脚本中也有版本检查。我基本上是在尝试确保使用正确的Python调用它们,并确保它们在尽可能多的系统和Python发行版上运行

上面的包装器是我在Windows、Linux、Cygwin和Darwin(可能还有BSD)上发现的唯一可以与标准Python发行版配合使用的包装器

我是这些东西的初学者,我知道没有完美的解决方案,所以我想知道是否有人能指出在什么情况下上述方法不起作用,并帮助我改进

谢谢。

有关如何在Windows上正确的Python解释器中处理执行代码的信息,请参阅。另一方面,本文介绍了在类Unix平台上运行时的类似主题。最近的更改是在中进行的,以允许在应该执行代码的位置定义行为

PEP 397:Windows的Python启动器

Python 3.3 Windows安装程序 现在包括一个py launcher应用程序,可用于启动 Python应用程序以独立于版本的方式运行

双击*.py文件时隐式调用此启动器。 如果系统上只安装了一个Python版本,那么 版本将用于运行该文件。如果需要多个版本 已安装,默认情况下使用最新版本,但可以 通过在Python中包含Unix样式的“shebang行”覆盖 剧本

启动器也可以从命令行显式地用作 py应用程序。运行py遵循的版本选择规则与 隐式启动脚本,但可以使用更具体的版本 通过向请求传递适当的参数(例如-3)来选择 如果还安装了Python2,则为Python3,或者指定为-2.6 当需要更新的Python版本时,请求更早的Python版本 已安装)

除了启动器,Windows安装程序现在还包括 选项将新安装的Python添加到系统路径。 (Brian Curtin在第3561期中提供。)

简言之,用以下几行作为代码的开头:

  • #/用于python2.x的usr/bin/env python2
  • #/用于python3.x的usr/bin/env python3

谢谢。你对包装有什么意见吗?当系统缺少
python2
,或者
python
引用python3时,我仍然对最佳解决方案感兴趣。