Pycharm, Jupyter Notebook, 从不同的目录导入我自己的源文件
Pycharm, Jupyter Notebook, import my own source files from different directory
我的目录结构如下
project/
jupyter/
note.ipynb
src/
some_script.py
another_script.py
jupyter
子目录包含 Jupyter 笔记本,src
子目录包含我的 .py
文件。 src
子目录被标记为源目录。
在 Jupyter notebook 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 ...
,显然我不想那样做。我上面描述的这个问题有解决方案吗?
不知道这是否有帮助,但 Jupyter 将自己限制为仅查看打开位置下方的文件,据我所知,这是为了帮助提高 Jupyter Notebooks 服务的设计。默认情况下在多用户环境中。
In my mind I'm thinking that there is a setting or switch somewhere that adds the src subdirectory to the PYTHONPATH
used by the Jupyter Notebook environment by default
是的,您可以为每个内核设置 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"
}
我的目录结构如下
project/
jupyter/
note.ipynb
src/
some_script.py
another_script.py
jupyter
子目录包含 Jupyter 笔记本,src
子目录包含我的 .py
文件。 src
子目录被标记为源目录。
在 Jupyter notebook 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 ...
,显然我不想那样做。我上面描述的这个问题有解决方案吗?
不知道这是否有帮助,但 Jupyter 将自己限制为仅查看打开位置下方的文件,据我所知,这是为了帮助提高 Jupyter Notebooks 服务的设计。默认情况下在多用户环境中。
In my mind I'm thinking that there is a setting or switch somewhere that adds the src subdirectory to the
PYTHONPATH
used by the Jupyter Notebook environment by default
是的,您可以为每个内核设置 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"
}