【问题标题】:Jupyter: why can't I import a `.py` file with a method containing a shell command?Jupyter:为什么我不能使用包含 shell 命令的方法导入 `.py` 文件?
【发布时间】:2026-01-02 06:35:02
【问题描述】:

这适用于我的笔记本(python 3):

from google.colab import auth
def google_cloud_auth(project_id):
  auth.authenticate_user()
  !gcloud config set project {project_id}
  return project_id

project_id = "my-project"
google_cloud_auth(project_id)
# Updated property [core/project].

这不是:

import colab_utils

project_id = "my-project"
colab_utils.google_cloud_auth(project_id)
# ERROR:
  File "/content/colab_utils.py", line 14
    !gcloud config set project {project_id}
    ^
SyntaxError: invalid syntax

colab_utils.py中的方法相同

我做错了什么?

【问题讨论】:

  • 这不是有效的python。您应该考虑将该行更改为 os.popen 调用

标签: python jupyter-notebook google-colaboratory


【解决方案1】:

这些命令不应该在原生 Python 中工作。

感叹号(以及许多其他单元格魔术功能)是 Jupyter/IPython shell 的一个特定功能。它们在命令执行之前由 shell 处理,并且从未传递给实际的 Python。

【讨论】:

  • 有解决方法吗?我只需要整理一些常用的util函数
  • @michael 我想os.system("gcloud config set project %s" % project_id) 这样的东西可能就足够了
  • 我刚试过,但我得到了返回码而不是stdout。我最终使用了subprocess
最近更新 更多