如何更改 ipython 内核的 PYTHONPATH



我正在做分析,我打算将我的脚本重组成一个包。我有一个这样的目录结构:

project
|   README.md
|   setup.py
|   requirements.txt
|
└───data
└───notebooks
|     notebook_A.ipynb
|
└───my_package
    |   __init__.py
    |
    └───module_A
    |    __init__.py
    |    source_A.py
    |
    └───module_B
        __init__.py
        source_B.py

首先,我将使用 Conda 创建一个环境:

conda create my_environment

然后,目标是使my_package可在笔记本中导入,而不会失去编辑源的功能。所以我会跑:

$ (my_environment) pip install -e .

这将按预期工作并创建:

/Applications/anaconda3/envs/my_environment/lib/python3.6/site-packages/my_package.egg-link

然后我想检查一切正常:

$ (my_environment) cd notebooks

一切都在 ipython 中工作:

$ (my_environment) ipython

In [1]: import src
In [2]: src.__path__
Out[2]: ['/Users/jalmarituominen/Desktop/my_environment_project/src']

但是当我运行 jupyter 笔记本并使用内核运行它时my_environment我得到

import sys
sys.path
[1]:
['',
'/Applications/anaconda3/lib/python36.zip',
'/Applications/anaconda3/lib/python3.6',
'/Applications/anaconda3/lib/python3.6/lib-dynload',
'/Applications/anaconda3/lib/python3.6/site-packages',
'/Applications/anaconda3/lib/python3.6/site-packages/aeosa',
'/Applications/anaconda3/lib/python3.6/site-packages/IPython/extensions',
'/Users/jalmarituominen/.ipython']

当然,我无法导入my_package因为它不在 PATH 中。

但是,当我将内核更改为 Python 3 时,我得到:

import sys
sys.path
[1]:
['/Applications/anaconda3/envs/my_environment/lib/python36.zip',
'/Applications/anaconda3/envs/my_environment/lib/python3.6',
'/Applications/anaconda3/envs/my_environment/lib/python3.6/lib-dynload',
'',
'/Applications/anaconda3/envs/my_environment/lib/python3.6/site-packages',
'/Users/jalmarituominen/Desktop/my_environment_project',
'/Applications/anaconda3/envs/my_environment/lib/python3.6/site-packages/IPython/extensions',
'/Users/jalmarituominen/.ipython']

而且my_package是可进口的。

由于某种原因,这两个环境的路径被混淆了。知道如何解决这个问题吗?是否可以手动更改内核的路径?

在这里,我希望Jupyter做点什么来简化环境的变化。这是我为获得更正结果所做的:

$ conda activate my_env
$ (my_env) conda install ipykernel -y
$ (my_env) python -m ipykernel install --user --name my_env --display-name "My Env"

然后,我确保我有正确的 Python 路径到我的环境

$ (my_env) jupyter kernelspec list | grep my_env

这给了我环境内核的位置。其中有一个.json设置文件,您可以编辑路径以更正Python,显示名称和其他内容。

在此之后,我可以在内核之间切换。

最新更新