0

我的问题是每次我开始一个新项目时,我都需要在该项目的虚拟环境中安装一个 IPython 内核。这是一个问题,因为内核及其所有依赖项都在每个项目的 requirements.txt 中,即使它们仅用于开发而不是项目本身。例如,将一个简单的单页网站推送到 Heroku 只需要flask,gunicorn及其依赖项。但是因为我正在使用 Jupyter 进行开发,所以它最终也“需要”了 IPython 内核附带的所有包:

backcall, colorama, parso, jedi, decorator, pickleshare, six, ipython-genutils, 
traitlets, wcwidth, prompt-toolkit, pygments, ipython, tornado, jupyter-core, pyzmq, 
python-dateutil, jupyter-client, ipykernel

问题不完全是使用虚拟环境。我可以更改 Atom 中的环境,如果我从终端运行我的脚本,它就可以正常工作。但是当我尝试直接在 Jupyter notebook 中运行时,系统级内核看不到虚拟环境中的功能。

这是重现问题的方法。首先,创建一个虚拟环境。我使用pipenv,但也尝试virtualenvwrapper了相同的结果。然后,切换到环境。我尝试了两种方法并且都有效:

  1. 正常启动 atom 并使用包 atom-python-virtualenv 选择我的虚拟环境(需要virtualenvwrapper-win和一些配置)。
  2. 使用 pipenv,pipenv run atom .在 windows cmd 中运行。(一些 Atom 包现在可能会发现它们与该解决方案的依赖关系。我通过编辑它们各自的选项来解决这个问题,使其始终指向我系统的 python。)

通过这两种方法,我可以使用 atom 中的终端(我使用过)确认我处于正确的环境中platformio-ide-terminal,然后 install flask pip list # shows pip、setuptools 和 wheel pip install flask

最后,我启动了 IPython 内核。Hydrogen检测系统级别安装的内核,这正是我想要的。但是,如果我import flask在 .py 脚本中尝试,我会得到一个ModuleNotFoundError.

我想要的是内核检测我所处的环境,并查看该环境的包。换句话说 :

  1. 在我的系统环境中安装 Jupyter、内核和任何开发包
  2. 发射原子/氢。因为它们是在系统级别安装的,所以它们应该能够随时看到 Jupyter 和我的内核。
  3. 启动内核并让它看到系统环境中的包。
  4. 杀死内核
  5. 切换到没有 jupyter 或内核的新环境
  6. 启动内核,它会检测新环境并仅查看该新环境中的包。

我正在考虑在启动时向内核发送参数以指示要使用哪个 Python 文件夹,但它会在它所在的文件夹中查找其初始化函数。

也许是符号链接?

4

0 回答 0