擅长:python、mysql、java
<p>到目前为止,公认的答案对我最有效。不过,我一直担心的是,有一种可能的情况是,我可能会将<code>notebooks</code>目录重构为子目录,需要更改每个笔记本中的<code>module_path</code>。我决定在每个笔记本目录中添加一个python文件来导入所需的模块。</p>
<p>因此,具有以下项目结构:</p>
<pre><code>project
|__notebooks
|__explore
|__ notebook1.ipynb
|__ notebook2.ipynb
|__ project_path.py
|__ explain
|__notebook1.ipynb
|__project_path.py
|__lib
|__ __init__.py
|__ module.py
</code></pre>
<p>我在每个笔记本子目录中添加了文件<code>project_path.py</code>(<code>notebooks/explore</code>和<code>notebooks/explain</code>)。此文件包含相对导入(从@metakermit)的代码:</p>
<pre><code>import sys
import os
module_path = os.path.abspath(os.path.join(os.pardir, os.pardir))
if module_path not in sys.path:
sys.path.append(module_path)
</code></pre>
<p>这样,我只需要在<code>project_path.py</code>文件中进行相对导入,而不是在笔记本中。然后,笔记本文件只需要在导入<code>project_path</code>之前导入<code>lib</code>。例如在<code>0.0-notebook.ipynb</code>中:</p>
<pre><code>import project_path
import lib
</code></pre>
<p>这里的警告是,逆转进口是行不通的。这不起作用:</p>
<pre><code>import lib
import project_path
</code></pre>
<p>因此,进口时必须小心。</p>