Python 在JupyterHub中使用包的开发版本

Python 在JupyterHub中使用包的开发版本,python,module,package,jupyter,Python,Module,Package,Jupyter,我正在努力改进我们团队开发的pip安装包。在集成到新版本之前,我无法导入改进的和附加的模块进行彻底测试。我知道这可能是名称空间问题,但我无法解决它们。我读过我能找到的,包括这本极好的书 我正在Jupyter中对库方法进行测试和应用。在避免冲突的失败尝试中,我将其重命名为top package dir: new_package/ setup.py __init__.py new_package_dir/ __init__.py cool_things.py di

我正在努力改进我们团队开发的pip安装包。在集成到新版本之前,我无法导入改进的和附加的模块进行彻底测试。我知道这可能是名称空间问题,但我无法解决它们。我读过我能找到的,包括这本极好的书

我正在Jupyter中对库方法进行测试和应用。在避免冲突的失败尝试中,我将其重命名为top package dir:

new_package/
  setup.py
  __init__.py
  new_package_dir/
    __init__.py
    cool_things.py
    dir1/
      __init__.py
      foo.py
    dir2/
      __init__.py
      bar.py
我没有main()方法。我们正在使用Python3.6。软件包的设置使顶层的_init__u; py.py文件包含:from dir1 import*和from dir2 import*。其他的_uinit__;.py文件是空的

在jupyter,我试着

import sys
sys.path.append('absolute_path_to_new_package_dir/')
import new_package_dir.dir1.foo as foo
以及其他几种变体。我得到错误ModuleNotFoundError:没有名为“new_package”的模块


谢谢你的建议。我的问题似乎与上面博客中描述的问题几乎相同,只是我不想执行main(),我希望库可以在Jupyter中使用

我现在可以回答我自己的问题,把其他各种答案和博客文章拼凑在一起。最终,解决方案是:

  • 创建虚拟环境
  • 在该环境中创建工作包的开发版本,以及
  • 为要在JupyterHub中使用的环境创建jupyter/ipython内核
具体来说,这就是我实现这些目标的方式,以及一路上遇到的困难:

创建虚拟环境 这是所有标准的conda虚拟环境。安装virtualenv。如果已安装conda,请使用

conda install virtualenv
在这种情况下,pip安装将不起作用。然后在主目录中创建一个目录“virtualenvs”来存储环境。目录名和环境名并不重要

virtualenv ~/virtualenvs/my_env
创建一个虚拟环境my_env。现在,用

source ~/virtualenvs/my_env/bin/activate
提示符将显示新环境

创建开发包 导航到要在其中开发并运行的包

python setup.py develop
在我的例子中,这个问题持续了相当长的时间,并对numpy提出了无休止的警告。我没有进一步调查这一点,因为最终它成功了,而且似乎其他人报告了develop和numpy的类似问题

完成后,您应该会收到如下消息

Using <your_home>/virtualsenvs/my_env/lib/python3.6/site-packages
Finished Processing dependencies for way-cool-package==0.01
此时,使用python解释器,您可以测试模块是否可访问。我在模块中添加了一个新的print_hello方法,然后检查是否可以导入该方法。我第一次这么做的时候,顺序不正确,结果python只导入站点安装的包,而不是我的新增强

我们经常在JupyterHub工作,所以这对我们的团队来说还不够好。如果您尝试在这里的命令行上使用ipython,它会唠叨。下一步

创建Jupyter内核 在新的虚拟环境中,检查是否使用pip freeze安装了ipykernel模块。否则,

pip install ipykernel
通过创建一个名为new_kernel的新Jupyter内核

python -m ipykernel install --user --name=new_kernel
这将在主目录中安装内核并报告

Installed kernelspeck new_kernel in <your_home>/.local/share/jupyter/kernels/new_kernel
Installed kernelspeck new_kernel in/.local/share/jupyter/kernels/new_kernel
现在,刷新你的JupyterHub笔记本,打开一个新的,你应该有“new_内核”作为一个选项

最后一招 我遇到的最后一个问题是在我依赖的同事的包中。他们在代码中使用_文件_;创建文档字符串。在尝试在新内核中使用我自己的模块时,我遇到了一个“NotDirectoryError”,这让我感到困惑。毕竟,他们的代码是pip在站点范围内安装的,没有任何问题。然后,我在setup tools文档中注意到,您应该使用pkg_resource.resource_string(),而不是使用像_file__;这样假设路径的引用。我对他们的代码做了修改,一切都很完美

以下是我使用的一些资源:


不应该是:
sys.path.append('absolute\u path\u to\u new\u package\u dir/')
?更正@DSLima90-谢谢。
Installed kernelspeck new_kernel in <your_home>/.local/share/jupyter/kernels/new_kernel