在Jupyter笔记本中的另一个目录中导入py文件

问题描述 投票:3回答:2

我的问题与this有关。我在Jupyter Notebook中使用Python 3.6。我的项目目录是/user/project。在这个目录中,我正在构建一些模型,每个模型都有自己的文件夹。但是,有一个常见的functions.py文件,其中包含我想在所有模型中使用的函数。所以我想保持functions.py文件在/user/project,但能够从.ipynb/user/project/model1等的/user/project/model2文件中调用它...我怎么能这样做?

python-3.x python-import
2个回答
9
投票

没有简单的方法可以在另一个目录中导入python文件。这与jupyter笔记本无关

以下是您的问题的两种解决方案

  1. 您可以将包含要导入的文件的目录添加到路径中,然后导入该文件。像这样 导入系统 sys.path.insert(0,'/ path / to / application / app / folder') 导入文件
  2. 您可以为要导入的文件创建模块并在全局安装

1
投票

我建议在您的虚拟环境中安装functions.py作为软件包。这有一些好处:

  1. 您可以从位于任何位置但位于给定环境(内核)的任何iPython笔记本访问functions.py文件。
  2. 一旦你更改了functions.py文件中的任何功能,你就不需要一次又一次地重新加载你的iPython笔记本。它会自动重新加载每个更改。

这是如何做到的方式:

  • 在项目文件夹中创建setup.py文件(https://docs.python.org/2/distutils/setupscript.html
  • 激活您的虚拟环境,转到项目位置,然后使用此命令pip install -e .
  • 然后,在您的iPython笔记本中: %load_ext autoreload %autoreload 1 %aimport yourproject.functions 来自功能导入*

而已!


0
投票

假设您有一个文件夹名称Jupyter,并且您希望从另一个名为nn_webserver的文件夹中导入模块(employee)。

可视化:

enter image description here

做这个:

import sys
import os

module_path = os.path.abspath(os.path.join('..'))
if module_path not in sys.path:
    sys.path.append(module_path+"\\nn_webserver")

from employee import motivation_to_work

请参阅@metakermit的其他信息here

© www.soinside.com 2019 - 2024. All rights reserved.