【问题标题】:Specify which Python version interprets an executable指定哪个 Python 版本解释可执行文件
【发布时间】:2016-09-26 13:06:42
【问题描述】:

我使用 Python 3 开发了一个可以生成各种可执行文件的应用程序。然后我使用setuptools 来构建和分发这个应用程序,同样都是使用 Python 3。

在测试环境中安装此应用程序时,可执行文件已正确部署到bin 文件夹,因此可从系统中的任何位置调用。但是,当调用这些可执行文件时,系统会尝试使用 Python 2 解释器,从而导致异常。如何确保在调用这些可执行文件时使用 Python 解释器?

【问题讨论】:

  • 你在哪个操作系统上?
  • 我正在 Ubuntu 16.04 上开发并在其他基于 Debian 的发行版上进行测试。
  • 你是怎么安装的?如果您运行python3 setup.py install,则生成的启动脚本将使用 python3 shebang 生成。如果您使用 python(2) 安装它,那么脚本也将使用该解释器启动。
  • 我确实运行了python3 setup.py install。如何检查生成的启动脚本?
  • 这是一个脚本,用文本编辑器打开就行了

标签: python python-3.x


【解决方案1】:

我确保install 使用 Python 3 运行,并且生成的脚本包含正确的标头。我仍然不断收到 Python 2.7 的异常。

出于绝望,我创建了一个新的 Python 3 虚拟环境,其中的脚本开始正常工作。之前有报道称旧的虚拟环境出现问题,尤其是during a system upgrade

为了将来参考,我使用的命令:

mkvirtualenv -p /usr/bin/python3.5 venv_p3

【讨论】:

    【解决方案2】:

    您可能需要在脚本中使用 bash shebangs,它们是开头的小字符串,用于指定应该用什么二进制文件来解释它们。

    在您的情况下,您需要在脚本的开头添加#!/usr/bin/env python3。 bash shell 应该读取这个并将脚本传递给您安装的 python3 解释器。

    例子:

    #!/usr/bin/env python3
    
    # This should work on python3 and fail on python2:
    print("Hello from python3!")  
    

    【讨论】:

    • bin中的脚本通常由setuptools从setup.py中定义的入口点生成,shebang是自动生成的,指向安装时使用的解释器。而“bash shebang”是#!/bin/bash,在这种情况下它应该只是“shebang”,并且解释该行的不是bash(或其他shell)而是os。
    猜你喜欢
    • 1970-01-01
    • 2021-10-06
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 2016-06-30
    相关资源
    最近更新 更多