Pycharm,Jupyter Notebook,从不同目录导入我自己的源文件

Ray*_*Ray 5 python import pycharm jupyter

我的目录结构如下。

project/
  jupyter/
    note.ipynb
  src/
    some_script.py
    another_script.py
Run Code Online (Sandbox Code Playgroud)

jupyter子目录包含 Jupyter 笔记本,该src子目录包含我的.py文件。该src子目录被标记为源根目录。

在 Jupyter 笔记本中note.ipynb,如果我这样做import some_script,那么我就得到了ImportError: No module named 'some_script'。然而,from src import some_script工作正常,但如果some_script也有一条线就不行了import another_script。在我看来,我认为有一个设置或开关可以将src子目录添加到默认情况下 Jupyter Notebook 环境使用的目录中PYTHONPATH,但我不知道该怎么做,你能帮忙吗?

我知道我始终可以使用它sys.path.append,但我不想在我创建的每个 Jupyter 笔记本中都这样做。我还知道我可以将.ipynb文件和.py文件放在同一个子目录中,但我不喜欢以这种方式组织我的工作。最后,我知道我可以将项目目录设置为我的源根目录而不是子目录src,但这意味着我必须from src import ...在脚本中的所有位置执行.py此操作,显然我不想这样做。正如我上面所描述的,这个问题有解决方案吗?

cri*_*007 2

在我看来,我认为有一个设置或开关可以将 src 子目录添加到PYTHONPATHJupyter Notebook 环境默认使用的目录中

是的,您可以为每个内核设置 ENV 变量,但您需要找到存储这些变量的位置。

你可以为此奔跑,然后在其中jupyter kernelspec list打开一个。kernel.json

例如,这个来自我的 PySpark Jupyter 内核。

查看env: { "PYTHONPATH":变量。

{
  "argv": [
    "/Users/name/Library/Jupyter/kernels/apache_toree_pyspark_16/bin/run.sh",
    "--profile",
    "{connection_file}"
  ],
  "env": {
    "DEFAULT_INTERPRETER": "PySpark",
    "__TOREE_SPARK_OPTS__": "",
    "__TOREE_OPTS__": "",
    "SPARK_HOME": "/usr/local/opt/apache-spark@1.6/libexec",
    "PYTHONPATH": "/usr/local/opt/apache-spark@1.6/libexec/python:/usr/local/opt/apache-spark16/libexec/python/lib/py4j-0.9-src.zip",
    "PYTHON_EXEC": "python"
  },
  "display_name": "Apache Toree - PySpark (1.6)",
  "language": "python"
}
Run Code Online (Sandbox Code Playgroud)