我的笔记本和模块放在下面.

my_directory
  modules  # This is just a directory, not a module
    my_module_1.py
    my_module_2.py
  my_notebook.ipynb

my_module_2.py中导入my_module_1.py,my_notebook.ipynb中导入my_module_2.py,如下所示.

# in `my_module_2.py`
import my_module_1 as something
# in `my_notebook.ipynb`
import modules.my_module_2 as something
from modules.my_module_2 import my_function

如果我只运行my_module_2.py,那么它就能正常工作.但是,如果我在my_notebook.ipynb中运行代码,则ModuleNotFoundError的结果如下所示.

ModuleNotFoundError                       Traceback (most recent call last)
Input In [1], in <cell line: 1>()
----> 1 import modules.my_module_2 as something

File ~\my_directory\modules\my_module_2.py:1, in <module>
----> 1 import my_module_1 as something

ModuleNotFoundError: No module named 'my_module_1'

如果我像下面这样改变my_module_2.py,笔记本电脑就可以工作了,但如果我只运行my_module_2.py,那么my_module_2.py就不能工作了……

# in `my_module_2.py`
import modules.my_module_1.py import something

有什么我可以做的,使模块和笔记本电脑在不改变文件 struct 的情况下工作?

推荐答案

您希望您的项目顶层文件夹my_directory路径可由Python搜索.您需要该文件夹的绝对路径为

  1. 在您的PYTHONPATH环境变量上
  2. 调用python modules/my_module_1.py时的当前工作目录
  3. 您的IDE的"项目目录"(如pycharm、Spyder和vscode).他们会偷偷地把它添加到你的PYTHONPATH中,或者把它变成你的工作目录,当你按下Run键时,他们会呼叫python modules/my_module_1.py.
  4. 创建最小的setup.py,并在可编辑模式pip install -e .下安装包,以将其添加到python的搜索路径中.

这些方法中的任何一个都允许您编写

import modules.my_module_1 as something
import modules.my_module_2 as something_else

在您的笔记本、my_module_1.py和任何其他项目中,它们都将正确解析.

Python相关问答推荐

Django注释:将时差转换为小数或小数

具有症状的分段函数:如何仅针对某些输入值定义函数?

如果索引不存在,pandas系列将通过索引获取值,并填充值

根据网格和相机参数渲染深度

Python在tuple上操作不会通过整个单词匹配

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

Python 约束无法解决n皇后之谜

沿着数组中的轴计算真实条目

使用索引列表列表对列进行切片并获取行方向的向量长度

有症状地 destruct 了Python中的regex?

Excel图表-使用openpyxl更改水平轴与Y轴相交的位置(Python)

如何在虚拟Python环境中运行Python程序?

如何在Python数据框架中加速序列的符号化

Pandas—合并数据帧,在公共列上保留非空值,在另一列上保留平均值

try 将一行连接到Tensorflow中的矩阵

如何在WSL2中更新Python到最新版本(3.12.2)?

Python列表不会在条件while循环中正确随机化'

什么是合并两个embrame的最佳方法,其中一个有日期范围,另一个有日期没有任何共享列?

Flash只从html表单中获取一个值

(Python/Pandas)基于列中非缺失值的子集DataFrame