Импорт python пакетов, вложенных пакетов ... идет вверх, обход и т. Д. c ... не работает - что я делаю не так? - PullRequest
0 голосов
/ 29 января 2020

У меня проблема. Я портирую много кода на Python с разных языков, которые я кодировал за эти годы, и превращаю его в большой пакет.

Потому что не все подходит под один пакет - я вложенные пакеты внутри. Основным пакетом является AcecoolLib, который имеет init , он есть и во всех вложенных пакетах.

Поскольку я хочу иметь возможность импортировать AcecoolLib - и импортировать все, что находится под ним, все мои файлы инициализации импортируют все в своей соответствующей папке и любые пакеты ниже. Сейчас я вкладываю только 1 глубину - я не уверен, изменится ли это или нет. Вероятно, нет.

Я пробовал абсолютный импорт, и я пробовал относительный. Я попытался изменить sys.modules и sys.path. Я попытался добавить пути, и я не знаю, где я могу сопоставить имя пути. Я получаю правильную загрузку пакета, а в некоторых областях возникают ошибки, когда Acecool.X не существует. Я исправляю один, а другой всплывает.

Один, который я исправил, был - я подумал, потому что у меня было несколько пакетов с именем list / tuple / dict, так как, поскольку они ссылаются на типы данных, изменение их может быть выгодным. поэтому я поместил их во вложенный пакет с именем array и переименовал все из них, чтобы включить s в конце. списки, кортежи, диктанты. Я не фанат этого, но ошибка исчезла.

Сейчас я получаю сообщение об ошибке в своем каталоге steam, но я не знаю, что steam является защищенным именем.

Я используя пакет, прямо сейчас, в Sublime Text. Я буду использовать его там для плагинов, которые я пишу - для замены текущей системы, которую я использую, которая представляет собой один файл Acecool.py, импортированный как AcecoolLib в другой плагин ... Это ужасно, сложно поддерживать, и т. Д. c .. поэтому я переместил часть кода в пакеты.

Короче говоря, у меня много проблем.

Это первая главная попытка: https://bitbucket.org/Acecool/acecoollib/src/master/

И вот где я сейчас нахожусь: https://www.dropbox.com/s/xvaubq78hlhym9o/AcecoolLib.7z?dl=0

Я пробовал много вариантов ....

Я просмотрел другие пакеты, которые импортируют через вложенные пакеты, и я не нашел ничего, что показывало бы, что я делаю что-то другое (до того, как я начал добавлять куча дерьма для начала, чтобы найти решение) ...

Должно быть что-то, что позволяет мне настраивать пути для каждого пакета, а затем определять, что все они добавляются в пространство имен AcecoolLib с вложенными пространствами имен в пределах ...

Я хочу иметь возможность go в AcecoolLib / tests / dir и запускать тесты, выполняя сценарии непосредственно из тестов. Я также хочу иметь возможность импортировать из внешних / внутренних источников, чтобы иметь доступ ко всему, если мне это нужно.

Я также хочу иметь возможность импортировать только вложенные пакеты или все. ie: импорт AcecoolLib означает, что я должен иметь возможность получить доступ к Acecool.util.accessors - и так далее ... или если я импортирую Acecool.util, то я не вижу AcecoolLib.math - но я мог бы импортировать его.

Сейчас я тестирую импорт всего, так как мой текущий проект использует почти все функции, и т. Д. c ... Я добавил несколько тестов ...

Я прочитал довольно много на предмет импорта, и я сталкивался с бесчисленным множеством «это правильный путь», «нет это», «нет, это» и так далее ... ни один из которых не работает. Я сталкивался со статьями, в которых говорилось, что никогда не используйте этот тип импорта, или это ... et c .. большинство статей не очень полезны и страдают от личных мнений вместо того, чтобы освещать материал заголовка. Или они охватывают варианты уровня basi c 101, или показывают дерево каталогов (которое выглядит идентично моему) и говорят, что оно просто работает как есть ...

Может быть, это правильно - возможно, Sublime Text что-то делает иначе - ie: я знаю, что пакет добавляется в sys.modules, и все вложенные тоже - поэтому я просто потерян ....

Любая помощь приветствуется. Спасибо!

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