如果使用 python 和子进程从 pycharm 调用 gsutil 不起作用,“无法导入名称 _common”
Posted
技术标签:
【中文标题】如果使用 python 和子进程从 pycharm 调用 gsutil 不起作用,“无法导入名称 _common”【英文标题】:gsutil not working if calling from pycharm with python and subprocess, "cannot import name _common" 【发布时间】:2019-10-04 14:26:22 【问题描述】:我编写了一个 python 脚本来自动化一些 gsutil 操作。 如果我通过命令行运行 gsutil 可以正常工作。但是如果我在 python 中用 subprocess 翻译相同的命令,我会得到一个错误:
BUCKET_NAME = 'datastore-backup'
FOLDER_NAME = 'my_folder'
gcs_path = os.path.join('gs://', BUCKET_NAME, FOLDER_NAME)
files = subprocess.check_output(['gsutil', 'ls', gcs_path], stderr=sys.stdout)
print(files)
我收到此错误
Traceback (most recent call last):
File "/Users/dario/Downloads/google-cloud-sdk/bin/bootstrapping/gsutil.py", line 13, in <module>
import bootstrapping
File "/Users/dario/Downloads/google-cloud-sdk/bin/bootstrapping/bootstrapping.py", line 32, in <module>
import setup # pylint:disable=g-import-not-at-top
File "/Users/dario/Downloads/google-cloud-sdk/bin/bootstrapping/setup.py", line 55, in <module>
from googlecloudsdk.core import properties
File "/Users/dario/Downloads/google-cloud-sdk/lib/googlecloudsdk/core/properties.py", line 34, in <module>
from googlecloudsdk.core.util import times
File "/Users/dario/Downloads/google-cloud-sdk/lib/googlecloudsdk/core/util/times.py", line 55, in <module>
from dateutil.tz import _common as tz_common
ImportError: cannot import name _common
任何帮助
【问题讨论】:
我尝试在 Google Cloud Shell 中运行您的代码,但无法复制错误。它似乎与您的 Python 环境有关,而不是与 Google Cloud Platform 或gsutil
命令有关。我已经看到在 PyCharm 中运行代码时出现此错误。您能否确认您是否确实尝试在 PyCharm 中运行它?如果是这样,请检查this,它可能会有所帮助。
是的,我在 pycharm 中运行它.....按照建议的解决方案,盒装已经打勾,没有运气......
我建议您更改问题的标签,因为这不是 Google Cloud Platform 问题,只要 gsutil 命令从您的命令行运行且没有错误。这样,您的问题将吸引到更适合回答它的人。你也可以在 PyCharm 社区中搜索/发帖 here
ImportError when running dev_appserver.py from pycharm的可能重复
【参考方案1】:
我已经彻底解决了这个问题。问题的根源是当您调用subprocess.check
或os.system(
时,gsutil cli 将使用错误的 python。
在我的例子中,gsutil 使用一个系统 python 二进制文件 2.7
。我通过在/Users/dario/Downloads/google-cloud-sdk/lib/googlecloudsdk/core/util/times.py
中插入print(tz)
语句发现了这个问题。事实证明,它正在加载一个 Python2.7/site-packages 版本的 dateutil。
所以要解决这个问题,您可以通过以下方式指定 clouddk python 二进制文件
export CLOUDSDK_PYTHON=<what-ever-python-distro-you-want>
pyCharm 是首屈一指的绝妙工具。希望这能让一些人轻松使用这个强大的 IDE 的内置运行器/调试器。
【讨论】:
以上是关于如果使用 python 和子进程从 pycharm 调用 gsutil 不起作用,“无法导入名称 _common”的主要内容,如果未能解决你的问题,请参考以下文章