【发布时间】:2021-11-21 19:31:03
【问题描述】:
这是question I asked not long ago 的后续问题。答案是正确的并且效果很好,但是当我尝试将它应用到主包时它不起作用。
假设我有以下文件结构:
a/
->b/
->c/
-> __init__.py
-> script1.py
-> script2.py
->d/
-> __init__.py
-> script3.py
(__init__ 文件就像我上面链接的答案一样)。
在script3.py 中,我像这样导入script1.py:from b.c import script1。
当我在 Pycharm 中运行它时它可以工作,但是当我在 Colab 中克隆存储库时(所有这些代码都在 GitHub 存储库中)我收到错误:ModuleNotFoundError: No module named 'b'
这是有道理的,因为我的包不在sys.path 变量中。
在我克隆存储库后,手动将文件夹 a 添加到 sys.path 会有所帮助,但这不是一个真正的解决方案,因为我不能总是这样做(例如在单元测试中)。
所以我的问题是,我该如何解决?将__init__ 文件添加到文件夹b 没有帮助。
注意事项:
- 文件夹
a是项目的文件夹,所以它不是路径的一部分。 - 我的 GitHub 存储库是私有的,所以我不确定使其可安装(通过添加 setup.py 等)是否会有所帮助,但这是我的第一次,所以我不确定。
- 在 Colab 中,我导入
script3,就像from a.b.d import script3。在这种情况下,我必须指定文件夹a,因为b不在sys.path中。 - 如上所述,我可以在 Colab 中手动修复它,但这并不能真正解决问题,因为如果我想运行单元测试,例如它不会工作。
【问题讨论】:
-
你是如何运行你的代码的?
python d/script3.py还是python b/d/script3.py?您是否尝试在 Colab 中配置 PYTHONPATH 环境变量? -
@EmidioNeto 谢谢,我已经为我的问题添加了 2 个注释
标签: python python-3.x import