jasper519 2023-06-21 12:52 采纳率: 50%
浏览 71
已结题

在google-colab中,保存已有的module环境到google drive后调用时遇到问题

在google-colab中,保存已有的module环境到google drive后调用时遇到问题

我尝试通过在运行代码时将 Python 环境和模型保存到自己的 Google Drive 中,从而改进 Google Colab 文档。这样,在删除运行时并在第二天使用代码时,可以无需下载全部内容即可正常运行。

我使用了虚拟环境方法来下载模块。模型下载部分进行得很顺利,但在尝试调用已保存的模块时遇到了问题(我认为它们已保存,但在尝试使用时无法调用)。

Colab 链接:https://colab.research.google.com/drive/1y8NHYiItax3yvKLy6BbcLwGP4Kjq_FZU?usp=sharing *对于混乱的代码表示抱歉.我对 Python 还不太熟悉.

以下是代码中设置参数的部分:

# 配置 vits 所在文件夹名称
Drive_Name = 'Vi' #@param {type:'string'}

# 连接到 Google Drive
drive.mount('/content/gdrive')
gdrive_path = '/content/gdrive/MyDrive/'

# 创建目录
vi_dir = os.path.join(gdrive_path, Drive_Name)
webui_dir = os.path.join(gdrive_path, Drive_Name, 'vits-models')

以下是下载模块的部分:

#@title 6-下载需要的模块(忽略)
!pip install virtualenv
!virtualenv /content/gdrive/MyDrive/colab_env
!source /content/gdrive/MyDrive/colab_env/bin/activate; python3 -m pip install pip==21.3.1; pip install -r $webui_dir/requirements.txt

import sys
sys.path.append("/content/gdrive/MyDrive/colab_env/lib/python3.8/site-packages")

以下是出现问题的部分(在尝试运行程序时):

import sys
sys.path.append("/content/gdrive/MyDrive/colab_env/lib/python3.8/site-packages")
import numpy
print('Yes')
!source /content/gdrive/MyDrive/colab_env/bin/activate && /content/gdrive/MyDrive/colab_env/bin/python3 $webui_dir/app.py --share --device cuda --all

最后这段代码返回以下结果:

Yes
Traceback (most recent call last):
  File "/content/gdrive/MyDrive/Vi/vits-models/app.py", line 5, in <module>
    import utils
  File "/content/gdrive/MyDrive/Vi/vits-models/utils.py", line 7, in <module>
    import numpy as np
ModuleNotFoundError: No module named 'numpy'

我感到非常困惑。我可以看到 numpy 已经存在于我的虚拟环境中,而且我认为路径设置没有错误。我还将其添加到 sys.path 中,但问题仍然存在。

我尝试将最后一段代码改为:

import sys
sys.path.append("/content/gdrive/MyDrive/colab_env/lib/python3.8/site-packages")
import numpy
print('Yes')
!python3 $webui_dir/app.py --share --device cuda --all

现在返回:

Yes
Traceback (most recent call last):
  File "/content/gdrive/MyDrive/Vi/vits-models/app.py", line 9, in <module>
    import gradio as gr
ModuleNotFoundError: No module named 'gradio'

我在 site-packages 文件夹中进行了检查,确实找不到 gradio 文件夹。但是当第一次运行模块安装代码时,我可以在控制台中看到以下内容:

Collecting gradio==3.17.0
Using cached gradio-3.17.0-py3-none-any.whl (14.2 MB)

这是我的 Google Drive 结构:

img

img

顺便说一下,gradio 不在 site-packages 文件夹中)

因此,我真的很困惑代码的哪一部分出了问题. 请有人能帮忙吗?或者使用不同的方法来实现这个功能. 欢迎访问链接 (在问题上面)尝试运行代码(包含错误)。

我期望代码在删除运行时并打开新的运行时后能再次运行。结果是,代码只在安装模块的运行时中正常运行,而在打开新的运行时后无法正常运行。

提前感谢!

  • 写回答

4条回答 默认 最新

  • 开发技术控 2023-06-21 13:45
    关注

    引用gtp回答 有帮助的采纳一下哟
    仔细检查了你的代码和环境,发现有几个可能的原因导致无法调用保存的模块:

    1. 虚拟环境被删除。你使用了virtualenv创建了虚拟环境,但运行第二天时该环境可能被Colab删除了。建议你将虚拟环境也保存到Google Drive,在第二天加载时重新激活它。
    2. 模块的路径发生了变化。你保存的模块的相对路径发生变化,导致Python无法找到它们。建议使用绝对路径来保存和调用模块。
    3. 没有重新挂载Google Drive。你忘记在第二天的运行中重新挂载Google Drive,导致Python找不到保存在其中的模块。需要添加drive.mount('/content/gdrive')来重新挂载。
    4. 没有在新环境中安装要调用的模块。有些模块在虚拟环境中可用,但在普通环境下还需要安装。需要在第二天环境中使用pip安装这些模块。
      针对上述4点,我有以下建议:
    5. 将virtualenv也导出保存到Google Drive,在第二天运行前加载它。命令为:
      virtualenv myenv
      source myenv/bin/activate  # 激活环境
      # 保存环境
      zip -r myenv.zip myenv 
      
    6. 在保存和调用模块时使用绝对路径,而不要相对路径。
    7. 在第二天运行前首先使用drive.mount('/content/gdrive')重新挂载Google Drive。
    8. 检查所调用模块是否在新环境中可用,如果不是,使用pip进行安装。
    9. 在导出虚拟环境和模块时,也将相关的pip list导出,在第二天环境中使用它来安装所有需要的模块。
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月28日
  • 创建了问题 6月21日