Серверное приложение Bokeh - ImportError - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь импортировать функции из module1.py и module2.py в main.py, как показано ниже.

# my imports in main.py

from project_dir.bokeh_apps.scripts.module1 import func1
from project_dir.bokeh_apps.scripts.module2 import func2

ниже - мой пример того, как выглядит структура моей папки

project/
    project_dir/
        bokeh_apps/
            scripts/
                module1.py
                module2.py
                __init__.py
            main.py
            __init__.py
        dir_1/
        dir_2/
        __init__.py
    dev.ini
    prod.ini

Я получаю сообщение об ошибке ниже

Error running application handler <bokeh.application.handlers.directory.DirectoryHandler object at 0x7fbf647e4208>: No module named 'project_dir.bokeh_apps.scripts'
File "main.py", line 13, in <module>:
from project_dir.bokeh_apps.scripts.module1 import func1 Traceback (most recent call last):
  File "/home/username/.conda/envs/test_env/lib/python3.5/site-packages/bokeh/application/handlers/code_runner.py", line 81, in run
     exec(self._code, module.__dict__)
  File "/var/www/projects/project/project_dir/bokeh_apps/main.py", line 13, in <module>
     from project_dir.bokeh_apps.scripts.module1 import func1
ImportError: No module named 'project_dir.bokeh_apps.scripts'

Я использую сервер Bokeh, как показано ниже

bokeh serve bokeh_apps/

Среда (Моя среда одинакова наи dev и staging)

Python 3.5
Pyramid 1.5.7
bokeh 0.12.6
tornado 4.5.1

Примечание: Я протестировал все на своем экземпляре dev, все работает нормально и никаких проблем.Когда я тестирую это на своем промежуточном экземпляре, я получаю эти ошибки.

Пожалуйста, исправьте меня, если я делаю что-то не так!Любая помощь по этому вопросу будет принята с благодарностью:)

1 Ответ

0 голосов
/ 17 октября 2018

Это помогло мне организовать импорт.Вам нужно будет адаптировать его к вашим потребностям:

Создание собственного пакета Python

Лучший способ организовать импорт в приложении Python - создать новый пакет и установитьЭто.Пакет будет совпадать с именем папки основного контейнера.Структура папок:

funniest/
    funniest/
        __init__.py
    setup.py

Содержимое __init__.py

def joke():
    return (u'Wenn ist das Nunst\u00fcck git und Slotermeyer? Ja! ... '
            u'Beiherhund das Oder die Flipperwaldt gersput.')

В этой основной папке создайте файл setup.py с этим содержимым

from setuptools import setup

setup(name='funniest',
      version='0.1',
      description='The funniest joke in the world',
      url='http://github.com/storborg/funniest',
      author='Flying Circus',
      author_email='flyingcircus@example.com',
      license='MIT',
      packages=['funniest'],
      zip_safe=False)

Установитьпакет

pip install .               # install the package completely
pip install -e .            # only symbolic link

Так что теперь это должно работать

>>> import funniest         # the __init__.py file of this module is executed
>>> print funniest.joke()
...