【问题标题】:Pycharm, Jupyter Notebook, import my own source files from different directoryPycharm,Jupyter Notebook,从不同目录导入我自己的源文件
【发布时间】:2017-08-01 22:27:18
【问题描述】:

我的目录结构如下。

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 子目录,但这意味着我必须在我的.py 脚本中的任何地方都执行from src import ...,显然我没有'不想那样做。有没有我上面描述的这个问题的解决方案?

【问题讨论】:

    标签: python import pycharm jupyter


    【解决方案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"
    }
    

    【讨论】:

    • 我明白了。所以在 PyCharm 中没有“优雅”的方式来做到这一点,例如通过选中一个框或其他东西?
    • 我的意思是,你可以在 PyCharm GUI 中设置PYTHONPATH,是的。 stackoverflow.com/questions/34685905/…
    【解决方案2】:

    不知道这是否有帮助,但 Jupyter 将自己限制为仅查看打开位置下方的文件,据我所知,这是为了帮助提供 Jupyter Notebooks 更安全的设计。默认在多用户环境中。

    【讨论】:

      猜你喜欢
      • 2016-11-29
      • 2020-10-07
      • 2021-09-06
      • 1970-01-01
      • 2021-01-14
      • 2023-03-28
      • 2018-08-22
      • 1970-01-01
      • 2018-12-03
      相关资源
      最近更新 更多