gpt4 book ai didi

与 sys.path 顺序无关的与 SDK 包导入同名的 python 站点包

转载 作者:行者123 更新时间:2023-12-03 20:46:57 27 4
gpt4 key购买 nike

我正在尝试将 Google Cloud Shell 用作现有 App Engine Standard Python 2.7 应用程序的远程开发环境。已经安装了 SDK,所有的通信路径都已经建立(不用担心云身份验证/应用程序默认凭据/等),并且可以使用完整的一次性 VM(无需使用虚拟环境或任何其他 python 疯狂来使事情正常运行在共享环境中),这似乎是兼职开发/维护的理想设置。
...唉,我无法导入任何 appengine/google 软件包。
这似乎是 Google Cloud Shell 内部的一个问题。所以这里是解释清楚的步骤:
去打开一个全新的空谷歌 Shell:
https://shell.cloud.google.com/
键入此以查看应用程序引擎 SDK 的安装路径:

someuser@cloudshell:~$ echo $(gcloud info --format="value(installation.sdk_root)")/platform/google_appengine
/usr/lib/google-cloud-sdk/platform/google_appengine
注意 SDK 有一个 google_appengine/google文件夹...包含 appengine包裹:
someuser@cloudshell:~$ ls -la /usr/lib/google-cloud-sdk/platform/google_appengine/google
total 32
drwxr-xr-x 7 root root 4096 Nov 18 02:53 .
drwxr-xr-x 1 root root 4096 Nov 18 02:53 ..
drwxr-xr-x 12 root root 4096 Nov 18 02:53 appengine
-rw-r--r-- 1 root root 601 Jan 1 1980 __init__.py
drwxr-xr-x 5 root root 4096 Nov 18 02:53 net
drwxr-xr-x 3 root root 4096 Nov 18 02:53 protobuf
drwxr-xr-x 2 root root 4096 Nov 18 02:54 __pycache__
drwxr-xr-x 3 root root 4096 Nov 18 02:53 pyglib
找到 python 站点包位置:
someuser@cloudshell:~$ python -c 'import site; print site.getsitepackages()'
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
注意:其中一个目录也有 google具有不同软件包的文件夹:
someuser@cloudshell:~$ ls -la /usr/local/lib/python2.7/dist-packages/google
total 60
drwxr-sr-x 15 root staff 4096 Nov 18 03:12 .
drwxrwsr-x 1 root staff 4096 Nov 18 03:40 ..
drwxr-sr-x 2 root staff 4096 Nov 18 03:11 api
drwxr-sr-x 5 root staff 4096 Nov 18 03:11 api_core
drwxr-sr-x 3 root staff 4096 Nov 18 03:11 _async_resumable_media
drwxr-sr-x 5 root staff 4096 Nov 18 03:11 auth
drwxr-sr-x 29 root staff 4096 Nov 18 03:12 cloud
drwxr-sr-x 3 root staff 4096 Nov 18 03:12 iam
drwxr-sr-x 3 root staff 4096 Nov 18 03:11 logging
drwxr-sr-x 2 root staff 4096 Nov 18 03:11 longrunning
drwxr-sr-x 2 root staff 4096 Nov 18 03:11 oauth2
drwxr-sr-x 6 root staff 4096 Nov 18 03:11 protobuf
drwxr-sr-x 3 root staff 4096 Nov 18 03:11 resumable_media
drwxr-sr-x 3 root staff 4096 Nov 18 03:11 rpc
drwxr-sr-x 2 root staff 4096 Nov 18 03:11 type
好的..让我们开始python:
someuser@cloudshell:~$ python

Python 2.7.16 (default, Oct 10 2019, 22:02:15)
[GCC 8.3.0] on linux2

# let's inspect the sys.path

>>> import sys

>>> sys.path
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

# ^^ our SDK path isn't in there. let's add it to the front of the list in the manner we're supposed to

>>> sys.path.insert(1, '/usr/lib/google-cloud-sdk/platform/google_appengine')

# lets look again

>>> sys.path
['', '/usr/lib/google-cloud-sdk/platform/google_appengine', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-pa
ckages', '/usr/lib/python2.7/dist-packages']

# ok, that should work... RIGHT?


>>> from google.appengine.api import urlfetch
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named appengine.api

# NOPE... where's "appengine"???

>>> import google

# ummm....

>>> google.__path__
['/usr/local/lib/python2.7/dist-packages/google']

# ummmmmmmmmm.....
所以有几个问题,我不明白它们之间的关系或如何解决:
  • 云壳有googlegoogle 冲突的包SDK中的包
  • 为什么不尊重 sys.path 呢?

  • 这与包命名空间或其他东西有关......我不够聪明,无法弄清楚......请帮忙!

    最佳答案

    google.appengine模块被烘焙到第一代 Python (2.7) 运行时中。无法通过 pip 安装,在第二代 (3.x) 运行时或 Cloud Shell 中。
    使用它的唯一方法是编写和部署第一代 App Engine 应用程序。

    关于与 sys.path 顺序无关的与 SDK 包导入同名的 python 站点包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65111411/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com