【问题标题】:How to make dev_appserver.py use a sepparate version of python?如何让 dev_appserver.py 使用单独版本的 python?
【发布时间】:2020-04-12 21:22:11
【问题描述】:

在全新的 Ubuntu 安装中,我有 python 2.7、3.6 和 3.7。

运行 python --version 给我 3.7。 我可以使用 2.7 启动 dev_appeserver,但它似乎选择在内部使用 3.6:

INFO     2020-04-12 21:16:19,875 instance_factory.py:121] Detected Python 3.6.9

如何让它使用 python 3.7?

编辑

更多细节。所以在我的app.yaml 中,我确实将运行时正确设置为:

runtime: python37

所以理论上sdk里面应该使用python 3.7。不知道为什么它默认为 3.6

尝试直接调用dev_appserver.py 会出现更奇怪的错误:

ERROR    2020-04-15 09:19:07,053 sdk_update_checker.py:203] The requested api_version (None) is not supported by the python37 runtime in this release of the SDK. The supported api_versions are ['1'].

【问题讨论】:

    标签: python google-app-engine google-app-engine-python


    【解决方案1】:

    修改已安装的 Python 版本

    在此示例中的测试服务器上安装了 Python v2.7 和 v3.5。 Shell 命令pythonpython2python3 只是指向可执行文件/usr/bin/python2.7/usr/bin/python3.5 的链接。

    $ python    # type in "python", then press `Tab` 
     python      python2     python2.7   python3     python3.5 
    
    $ which python python2 python2.7 python3 python3.5
     /usr/bin/python 
     /usr/bin/python2 
     /usr/bin/python2.7 
     /usr/bin/python3 
     /usr/bin/python3.5 
    
    $ cd /usr/bin
    $ ls -go python python2 python2.7 python3 python3.5
     lrwxrwxrwx 1       9 Jan 24  2017 python -> python2.7 
     lrwxrwxrwx 1       9 Jan 24  2017 python2 -> python2.7 
     -rwxr-xr-x 1 3779512 Nov 24  2017 python2.7 
     lrwxrwxrwx 1       9 Jan 20  2017 python3 -> python3.5 
     -rwxr-xr-x 2 4747120 Jan 19  2017 python3.5 
    

    修改符号链接

    现有的 Python 符号链接可能会根据需要重新定义,例如:

    $ cd /usr/bin
    $ ls -go python
     lrwxrwxrwx 1 9 Jan 24  2017 python -> python2.7 
    $ python -V 
     Python 2.7.13 
    
    $ sudo rm python 
    $ sudo ln -s python3.5 python 
    $ ls -go python 
     lrwxrwxrwx 1 9 Apr 13 19:08 python -> python3.5 
    $ python -V 
     Python 3.5.3 
    

    运行 Python 脚本

    在 Linux shell 中运行 Python 脚本的常用方法有两种:

    1. 启动 Python 脚本本身而不在命令行中指定解释器;
    2. 启动解释器并将 Python 脚本作为参数传递。

    1. 在脚本开头添加shebang string 指定某个解释器。对于 Python v3(此示例带有重新定义的符号链接),它可以是以下任何一种:

    #!/usr/bin/python
    #!/usr/bin/python3
    #!/usr/bin/python3.5
    

    然后启动脚本:

    $ ./my_script.py
    

    2. 以脚本作为参数启动 Python v3 可执行文件。在这个例子中,下面列出的任何命令都可以工作:

    $ python my_script.py
    $ python3 my_script.py
    $ python3.5 my_script.py
    

    【讨论】:

    • 感谢您的回答,但我认为它可能不适用于这种情况。与一般运行的 python 脚本相比,问题更具体在于应用引擎 sdk 如何选择 python 运行时
    • 这是为了说明底层是什么,因为基本上 App Engine 只是一种抽象层或 Linux 和 Python 运行时的包装器。那里没有魔法。例如,在 App Engine Flexible 中,您可以根据需要定义基于 Docker 的自定义运行时环境,从 Python 脚本执行的角度来看,这看起来就像一组模块和可执行文件放置在正确的目录、内核和网络接口中。跨度>
    猜你喜欢
    • 1970-01-01
    • 2012-02-11
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    相关资源
    最近更新 更多