我的目录结构如下。
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
进行操作脚本,显然我不想这样做。如上所述,这个问题是否有解决方案?
答案 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笔记本更安全。默认情况下,在多用户环境中。