Google Colab 没有应用我对本地目录中的代码所做的更改
Google Colab does not apply the changes I make to the code in my local directory
我正在为一个项目使用来自 git 的克隆存储库,并且我不断地对克隆文件进行更改。我最近 运行 遇到了一个问题:无论我在克隆的 github 项目的本地文件中做了什么更改,这些更改都不会应用于 colab notebook(例如,如果我在此处添加打印在那里,不会打印任何内容,但会调用函数)。
在尝试将我的所有文件从我的 colab 推送到 git 后,我开始遇到这个问题,因为我知道如果我只保存笔记本,它们不会被保存,我按照这里的命令操作:
https://navan0.medium.com/how-to-push-files-into-github-from-google-colab-379fd0077aa8
我不确定,但我可能已经开始了一些多线程,我不擅长处理它。不管我改什么,都不会出现变化,我必须把变化推到git,然后再次克隆它,然后它们才会出现。另外,我必须终止运行时间,因为我无法摆脱!rm -rf directory_name
的目录,它仍然会出现在文件中。如果我重新运行相同的命令,它说目录不存在。
我很确定它是多线程或一些分叉进程。我想终止那个。
Link 到我的笔记本:
https://colab.research.google.com/drive/1WMaDcEwOdPEsZL65nU_T4Ps9tIkyPY5v?usp=sharing
这里没有特定于 colab 的东西——任何长期存在的 Python 会话都会以相同的方式运行。
您遇到的问题是 python 导入是 幂等的 :一旦您 import foo
,对 import foo
的任何进一步尝试都是一个空操作。 (Python 将导入结果缓存在 sys.modules
中。)因此,如果您导入一个模块,编辑它,然后再次导入,您将看不到您的编辑。
如果您在 python REPL 中并尝试编辑文件并重新导入它,您会看到相同的结果。
你有两个简单的出路:
- 重启python进程;在 Colab 中,这是 ctrl-m 。或
Runtime
-> Restart runtime
.
- 您可以使用
importlib.reload
重新导入更新后的代码。
reload
很棒,但我要警告你,它有很多锋利的边缘,很容易欺骗你自己。如果您的设置相当快(例如,您不必在内存中重新创建一堆大对象),重新启动是保持理智的好方法。
我正在为一个项目使用来自 git 的克隆存储库,并且我不断地对克隆文件进行更改。我最近 运行 遇到了一个问题:无论我在克隆的 github 项目的本地文件中做了什么更改,这些更改都不会应用于 colab notebook(例如,如果我在此处添加打印在那里,不会打印任何内容,但会调用函数)。
在尝试将我的所有文件从我的 colab 推送到 git 后,我开始遇到这个问题,因为我知道如果我只保存笔记本,它们不会被保存,我按照这里的命令操作:
https://navan0.medium.com/how-to-push-files-into-github-from-google-colab-379fd0077aa8
我不确定,但我可能已经开始了一些多线程,我不擅长处理它。不管我改什么,都不会出现变化,我必须把变化推到git,然后再次克隆它,然后它们才会出现。另外,我必须终止运行时间,因为我无法摆脱!rm -rf directory_name
的目录,它仍然会出现在文件中。如果我重新运行相同的命令,它说目录不存在。
我很确定它是多线程或一些分叉进程。我想终止那个。
Link 到我的笔记本: https://colab.research.google.com/drive/1WMaDcEwOdPEsZL65nU_T4Ps9tIkyPY5v?usp=sharing
这里没有特定于 colab 的东西——任何长期存在的 Python 会话都会以相同的方式运行。
您遇到的问题是 python 导入是 幂等的 :一旦您 import foo
,对 import foo
的任何进一步尝试都是一个空操作。 (Python 将导入结果缓存在 sys.modules
中。)因此,如果您导入一个模块,编辑它,然后再次导入,您将看不到您的编辑。
如果您在 python REPL 中并尝试编辑文件并重新导入它,您会看到相同的结果。
你有两个简单的出路:
- 重启python进程;在 Colab 中,这是 ctrl-m 。或
Runtime
->Restart runtime
. - 您可以使用
importlib.reload
重新导入更新后的代码。
reload
很棒,但我要警告你,它有很多锋利的边缘,很容易欺骗你自己。如果您的设置相当快(例如,您不必在内存中重新创建一堆大对象),重新启动是保持理智的好方法。