нет модуля с именем caffe, ошибка в ноутбуке jupyter, работающем в докере, в Windows 10 - PullRequest
0 голосов
/ 29 апреля 2019

На Windows 10 Pro я запустил Docker-контейнер:

docker run --shm-size=16g --ulimit memlock=-1 --ulimit stack=67108864 -it --rm -v G:/Dropbox/:/workspace/DRP/ -p 8888:8888 spellrun/caffe:latest

Это изображение, извлеченное из док-станции и являющееся linux

root@675aac742a80:~# uname -a
Linux 675aac742a80 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

В нем есть python3, python2, jupyter и caffe

root@675aac742a80:~# find / -name "python"
    /etc/python
    /var/lib/python
    /usr/local/lib/python2.7/dist-packages/notebook/static/components/codemirror/mode/python
    /usr/local/lib/python3.6/dist-packages/notebook/static/components/codemirror/mode/python
    /usr/local/cuda-9.2/share/gdb/python
    /usr/bin/python
    /usr/share/gcc-8/python
    /usr/share/lintian/overrides/python
    /usr/share/doc/python
    /usr/share/python

root@675aac742a80:~# find / -name "jupyter"
    /root/.local/share/jupyter
    /usr/local/etc/jupyter
    /usr/local/bin/jupyter
    /usr/local/share/jupyter

root@675aac742a80:~# find / -name "caffe"
    /usr/lib/python3/dist-packages/caffe
    /usr/bin/caffe
    /usr/share/bash-completion/completions/caffe

Я могу запустить ноутбук Jupyter отлично

jupyter notebook --ip=0.0.0.0 --allow-root

но потом

import caffe 

дает

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-4-6e7bb19bc708> in <module>()
----> 1 import caffe

ImportError: No module named caffe

Я думаю, это потому, что он ищет caffe в каталоге пакетов python2, когда он на самом деле находится в каталоге пакетов python3. И это происходит, даже когда я запускаю jupyter с ядром python3.

Даже когда я запустил ядро ​​python 3 в блокноте jupyter, jupyter ищет пакеты в библиотеке python2

import sys
sys.path

1024 * дает *

['',
 '/spell-utils',
 '/workspace/DRP/[deep-dream',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/local/lib/python2.7/dist-packages/IPython/extensions',
 '/root/.ipython']

Я думаю, это потому, что файл jupyter kernel.json указывает на python2 для ОБА ядер

root@675aac742a80:/usr/local/share/jupyter/kernels/python2#

{
 "display_name": "Python 2",
 "language": "python",
 "argv": [
  "python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ]
}

и

root@675aac742a80:/usr/local/share/jupyter/kernels/python3#

{
 "argv": [
  "python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "Python 3",
 "language": "python"
}

Поэтому я попытался добавить библиотеки python3 к пути следующим образом:

sys.path.append('/usr/local/lib/python3.6/dist-packages')
sys.path.append('/usr/lib/python3/dist-packages/')
sys.path.append('/usr/bin/caffe')
sys.path

дает

['',
 '/spell-utils',
 '/workspace/DRP/[deep-dream',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/local/lib/python2.7/dist-packages/IPython/extensions',
 '/root/.ipython',
 '/usr/local/lib/python3.6/dist-packages',
 '/usr/lib/python3/dist-packages/',
 '/usr/bin/caffe']

теперь импортное кафе дает это

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-10-6e7bb19bc708> in <module>()
----> 1 import caffe

/usr/lib/python3/dist-packages/caffe/__init__.py in <module>()
----> 1 from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver, NCCL, Timer
      2 from ._caffe import init_log, log, set_mode_cpu, set_mode_gpu, set_device, Layer, get_solver, layer_type_list, set_random_seed, solver_count, set_solver_count, solver_rank, set_solver_rank, set_multiprocess, has_nccl
      3 from ._caffe import __version__
      4 from .proto.caffe_pb2 import TRAIN, TEST
      5 from .classifier import Classifier

/usr/lib/python3/dist-packages/caffe/pycaffe.py in <module>()
     11 import numpy as np
     12 
---> 13 from ._caffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, \
     14         RMSPropSolver, AdaDeltaSolver, AdamSolver, NCCL, Timer
     15 import caffe.io

ImportError: No module named _caffe

Интересно, что у меня нет проблем при запуске этого док-контейнера на Linux-коробке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...