Как импортировать классы из другого каталога в плагине sublime

#python #sublimetext2 #sublimetext3 #sublimetext #sublime-text-plugin

#python #sublimetext2 #sublimetext3 #sublimetext #sublime-text-plugin

Вопрос:

Я хочу иметь структуру каталогов, подобную:

 myplugin
  -lib
    -myplugin.py
    -file.py
    -another.py
  -tests
    -file_tests.py
    -another_tests.py 
  

Я не могу заставить sublime распознать мой плагин, если он находится в дочернем каталоге. Это нормально, я могу сохранить точку входа в корневом каталоге и импортировать другие мои классы; однако я также не могу заставить это работать. Я написал код и запустил свои тесты нормально, вроде nosetest tests/ и все проходит — когда sublime пытается загрузить пакет, я получаю: ImportError: No module named 'lib' . Я новичок как в разработке плагинов sublime, так и в Python, но в основном мой плагин похож:

 import sublime
import sublime_plugin
from lib.something import Something
from lib.something_else import SomethingElse
from lib.something_else_else import SomethingElseElse

class MyPluginCommand(sublime_plugin.TextCommand):
  

Ответ №1:

Вы на правильном пути; Sublime сканирует и автоматически загружает файлы только в один каталог глубоко внутри папки Packages, как вы заметили.

Ваша проблема в том, что имя модуля, которое вы хотите импортировать, должно соответствовать имени пакета, в котором оно хранится. С точки зрения кода, который вы привели выше, будет работать следующее, при условии, что плагин, в котором хранится lib каталог, был назван myplugin :

 import sublime
import sublime_plugin
from myplugin.lib.something import Something
from myplugin.lib.something_else import SomethingElse
from myplugin.lib.something_else_else import SomethingElseElse

class MyPluginCommand(sublime_plugin.TextCommand):