Pycharm,Jupyter Notebook,从不同目录

时间:2017-03-11 16:29:29

标签: python import pycharm jupyter

我的目录结构如下。

project/
  jupyter/
    note.ipynb
  src/
    some_script.py
    another_script.py

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进行操作脚本,显然我不想这样做。如上所述,这个问题是否有解决方案?

2 个答案:

答案 0 :(得分:1)

  

在我看来,我认为有一个设置或开关在某处将src子目录添加到默认情况下Jupyter Notebook环境使用的PYTHONPATH

是的,你可以为每个内核设置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"
}

答案 1 :(得分:0)

Dunno如果这有帮助,但是Jupyter只限于查看它所在的地方以下的文件,据我所知,这是为了帮助使Jupyter笔记本更安全。默认情况下,在多用户环境中。