我在 GCS 存储桶上有以下结构:
- my_bucket/notebooks/jupyter/
- 模块
- 我的模块.py
- 初始化.py
- notebook_1.ipynb
- 模块
如何在 notebook_1.ipynb 中导入 mymodule? (notebook_1.ipynb 是一个 python 笔记本,不是 spark 笔记本)
最佳答案
恐怕这是不可能的,因为您需要将该模块放在您运行脚本的目录或您的 sys.path 中。 .
作为一个选项,您可以实现一个函数,从您的云存储下载模块,使用它的功能,然后将其删除。
这是我为测试目的编写的一个简单的示例:
greetings.py(我存储在存储桶中的文件):
def say_hello(name):
return "Hello {}!".format(name)
def say_hi(name):
return "Hi {}!".format(name)
main.py:
from google.cloud import storage
import os
def get_module():
"""
Instantiate Storage Client and return the blob located in the bucket.
"""
client = storage.Client()
bucket = client.get_bucket('<my-bucket-name>')
return bucket.blob('greetings.py')
def use_my_module(my_method, val):
"""
Download the module, use it and then remove.
"""
blob = get_module()
blob.download_to_filename('my_module.py')
import my_module
result = getattr(my_module, my_method)(val)
os.remove('my_module.py')
return result
print(use_my_module('say_hello', 'User 1'))
print(use_my_module('say_hi', 'User 2'))
输出:
Hello User 1!
Hi User 2!
我不能说上面的例子对你的场景是否有效,但我希望它能给你一些想法。
编辑:
关于您的模块位于脚本 (notebook_1.ipynb) 目录的子目录 中的情况 - 您可以像这样导入模块:
import modules.mymodule
然后你可以用下面的结构来使用它:
modules.mymodule.<your-method>
关于google-cloud-storage - Dataproc 导入存储在谷歌云存储 (gcs) 存储桶中的 python 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58832044/