Чтобы выполнить этот импорт, у вас есть 3 варианта, я перечислю их в том порядке, в котором я предпочитаю. (Для всех этих вариантов я буду использовать Python 3)
Относительный импорт
Ваша файловая структура выглядит как правильная файловая структура пакета, поэтому это должно работать, однако любой, кто пытается использовать эту опцию, должен отметить, что для этого требуется, чтобы вы были в пакете; это не будет работать для какого-то случайного скрипта.
Вам также потребуется запустить скрипт, выполняющий импорт из-за пределов пакета, например, импортировав его и запустив оттуда, а не просто запустив скрипт cmp2locus.py напрямую.
Затем вам нужно будет изменить импорт, чтобы он был относительным, используя ..
Итак:
import filelib.modelmaker.command_file
становится
from ..modelmaker import command_file
..
относится к родительской папке (например, к скрытому файлу в файловых системах). Также обратите внимание, что вы должны использовать синтаксис from import
, потому что имена, начинающиеся с ..
, не являются допустимыми идентификаторами в python. Однако вы, конечно, можете импортировать его как угодно, используя from import as
.
См. также PEP.
Абсолютный импорт
Если вы поместите свой пакет в сайт-пакеты (каталоги возвращенный site.getsitepackages()
), вы сможете использовать формат импорта, который вы пытались использовать в вопросе. Обратите внимание, что для этого требуется, чтобы все пользователи вашего пакета также установили его там, поэтому это не идеально (хотя они, вероятно, будут, полагаться на это плохо).
Изменение пути Python
Как ответил Meera, вы также можете напрямую изменить путь python, используя sys.
Мне лично не нравится этот вариант, так как он кажется очень «хакерским», но мне сказали, что он может быть полезен, поскольку дает вам точный контроль над тем, что вы можете импортировать.
person
Blimmo
schedule
17.03.2017