有没有办法在Python3中使用gcloud?

40

我对使用Python3中的gcloud有些困惑。

在我安装了Python3环境下的gcloud之后,我尝试运行App Engine柔性环境中的Python快速入门示例。

它说“你需要Google Cloud SDK”,所以我安装了SDK。安装完SDK后的整个过程(包括SDK),都需要在Python2环境下运行。

这里有一个问题,是否无法(官方)使用Python3运行gcloud?(SDK和Python2与gcloud库一起使用是最好的方法吗?)

5个回答

33

我解决了这个问题,通过指定到Python 2的路径(我在系统上命名为python2)。

$ export CLOUDSDK_PYTHON=$(which python2)
$ ./install.sh

我建议将导出命令添加到您的.bashrc.zshrc文件中。


1
安装完成后,当您运行 gcloud 时,它实际上在幕后调用 which python2。因此,如果上述操作成功,则无需在 .bashrc 中设置此环境变量。另一方面,如果 python2 不在路径中,则应显式设置环境变量为其完整路径。 - cherba
感谢 @mmla 和 @cherba!首先,我按照你们的提示安装了gcloud。然后我尝试更新我的gcloud组件,但它再次抱怨“python3无法打开,因为开发者无法验证。”所以我在我的.zshrc文件末尾添加了export CLOUDSDK_PYTHON=$(which python2)然后它又可以工作了! - headwinds
困惑了,这对Python3没有帮助吗?我猜如果你安装了Python2和Python3就可以工作。不过JCottons更正确。 - Ian

19
截至2019-12-17,版本274.0.0正式支持Python 3. 发布说明:

Cloud SDK现在已经支持Python 3的GA版本。请运行gcloud topic startup获取以下信息:

  • 配置Cloud SDK使用的Python解释器的信息。
  • 需要Python 2.7解释器的Cloud SDK工具列表。
  • Python 3支持的已知问题列表。

(该命令显示dev_appserverendpointscfg是例外情况。)

根据搜索顺序,如果gcloud找到Python 2,则仍将使用Python 2。您可以通过设置CLOUDSDK_PYTHON=python3(或类似)作为环境变量来明确指定。


10

gcloud-pythonCloud SDK 中的 gcloud-cli 是两个没有直接关联的产品。虽然运行 gcloud-cli 需要 python 2.7.x,但这并不妨碍你在使用 gcloud-python 库时使用 python3。

比如,在你的系统上安装多个版本的 python,例如 2.7x 和 3.5(你甚至可以将 python3 设置为默认),只要设置 CLOUDSDK_PYTHON 环境变量指向 python 2.7.x 解释器,你就可以同时运行 gcloud-cli 并使用 python3 进行项目开发。

以 Windows 为例,Cloud SDK 包含了自己的 python,不会与你系统中的任何其他版本产生冲突,而且它只是 gcloud-cli 的纯运行时依赖。


感谢您的回答,我明白了'gcloud'的概念,它只是一个连接器,我可以在我的Python脚本中使用它来控制GCP环境。 - piper

2
install.sh文件中,它说支持python3但并没有优先考虑,因为我认为python2更常见。这意味着如果你使用的是macOS,通过添加环境变量的一行echo "export CLOUDSDK_PYTHON=/your/path/to/python3" >> ~/.bash_profile将允许gcloud使用任何已经安装在系统中的python3。
如果不起作用,那么指向任何python2并只使用python3来完成自己的工作应该可以解决问题。
# if CLOUDSDK_PYTHON is empty
if [ -z "$CLOUDSDK_PYTHON" ]; then
  # if python2 exists then plain python may point to a version != 2
  if _cloudsdk_which python2 >/dev/null; then
    CLOUDSDK_PYTHON=python2
  elif _cloudsdk_which python2.7 >/dev/null; then
    # this is what some OS X versions call their built-in Python
    CLOUDSDK_PYTHON=python2.7
  elif _cloudsdk_which python >/dev/null; then
    # Use unversioned python if it exists.
    CLOUDSDK_PYTHON=python
  elif _cloudsdk_which python3 >/dev/null; then
    # We support python3, but only want to default to it if nothing else is
    # found.
    CLOUDSDK_PYTHON=python3
  else
    # This won't work because it wasn't found above, but at this point this
    # is our best guess for the error message.
    CLOUDSDK_PYTHON=python
  fi
fi

0

感谢您的回答,我原以为如果想使用GCP,就需要安装gcloud库和SDK。在gcloud库页面的底部,有一个Python 3标志。所以,我认为还有其他原因导致Python 3出现在其中,但我不知道是什么原因。但是,如果我安装了SDK,那么就没有必要安装pip install --upgrade gcloud了,对吧? :) - piper
谷歌云库似乎是一个连接器,如果你不想用的话就不需要真正使用它。这也取决于你使用GCP的哪个部分,例如如果你使用appengine,可以跳过gcloud SDK直接使用appengine SDK。gcloud SDK本身有更多的功能,因为它还用于GCE、GKE等。 - marcadian
10
我的理由是,这是我最后需要使用旧版本Python的工具 :) 其他所有工具都已经在Python 3上运行。 - Kedare
2
@marcadian 因为所有新版本都将使用Python 3,所以使用最新和更稳定的Python版本没有意义吗?我不明白的是为什么谷歌还没有支持这个。 - Manza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接