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