Предварительно Примечание: Это применяется к моим файлам в Python 3.6.0, однако любое решение в Python 3.x отлично работает!Python Импорт промежуточных папок
Импорт в промежутках между папками
Я в настоящее время на Windows (не то, что она имеет значения) и убирая каталог-систему, как видно:
Python Projects (Irrelevant)
+- Some Project (Irrelevant)
+- Some other abandoned Project (Irrelevant)
|
| (Some space to put some thought on perspectives...)
|
+- Current Project
+- game.py <-(acting as a game-launcher)
+- __init__.py <-(for packaging purposes)
+- main <-(folder)
+- menu.py
+- __init__.py
+- chapters <-(folder)
+- chap1a.py <-(Irrelevant)
+- misc <-(folder)
+- func.py
+- __init__.py
Я экспериментировал с несколькими способами импортерах , начиная от:
1. __import__
сам метод
2. размещая все файлы в одну папку и импорта между ними (что работает, но я ищу более методу «вещей» делать это)
3. выполняя относительный импорт и перенастройки sys.path
для руководства процесса импорта
4. с помощью from <whatever folder> import <file>
5. используя from <file> import <class or function>
(который работает, но Я не могу пройти мимо «между папки» проблемы)
6. размещая __all__ = ["filename", "filename"]
в __init__.py
«s
7. импортирования с folder.folder.file <attribute?>
синтаксиса
... и многие другие методы, которые имеют в конечном счете, не удалось мне. (Может быть, я не совсем , что повезло?)
Немного более глубокий (то, что я пытался ...)
Мой оригинальный метод импортирования, используемый, когда вся моя работа была изначально запрограммирована Python 2.7 и на основе Raspberry Pi (ах, старые воспоминания), состоял из:
- Размещение __init__.py
«S во всех моих подпапках затем импортировать как: import main.menu
- Кроме того, с помощью Специфического при импорте: from misc.func import <function>
- Размещение все файлы в одной папке затем импорт (это было, когда я переехал в папку-импортер, как средство сделать вещи аккуратно)
Выше было отлично работает. Но ... теперь, когда синтаксис (и стандарты) немного отличается, вы можете увидеть мою проблему.
Я попытался прилагая путь, процесс импорта будет принимать:
#Python
import sys
sys.path.append("/Current Folder/main/menu.py") #Example
import menu
, чтобы получить NameError
с или ModuleNotFoundError
S:
Traceback (most recent call last):
File "C:\Users\~\Documents\PythonProjects\CurrentProject\game.py", line 11, in <module>
import menu
ModuleNotFoundError: No module named 'menu'
Я сейчас приходится расширять по индивидуальному FUNCTION- импортирует, превращая их в импорт папок (находясь далеко от импорта дикой карты). Примером может служить файл game.py
, который (предположительно) использует: import main.menu
и import misc.func
.
Это «странно» Папка-именование шахты также приводит к вопросу:
Что все это используется для?
Пользователь будет начать игру, выполнив game.py
файл (или Windows/Mac Executable), который импортирует из папки «разностороннего»: func.py
, и от «основной»: menu.py
.
Game-launcher передает управление в файл главного меню, в котором отображается (вы получили его!) В главном меню. Если пользователь уйдет, он выполнит sys.exit(0)
. Однако, если они играют в игру, это будет , затем import-and-play файл chap.py
(файл главы).
Как только этот конкретный файл главы будет закончен, он, предположительно, отрегулирует управление на menu.py
, который будет , затем предоставит возможность выхода из игры или воспроизведения других файлов разделов.
Разум ошеломляющий, я знаю. Если у кого-то есть лучшее решение, чем то, что я делал в течение последних четырех месяцев, пожалуйста, просветите меня, мне нужно обновление от «Knowledge-bank» отчаянно.
Спасибо.
Большинство вещей, которые вы пробовали, должно было хорошо работать, хотя не все из них были бы хорошей идеей. Вы, должно быть, делаете что-то не так, как вы не показали нам. Покажите нам конкретный код ошибки и сообщите нам, как это происходит, включая полное сообщение об ошибке и трассировку стека, если таковая имеется. – user2357112
Кроме того, ничто об этой настройке не является особым или уникальным отличием от гигантской кучи других вопросов импорта Python. – user2357112
@ user2357112 Теперь мой «неудачный код» недоступен - так как у меня была «абсолютно отличная идея» по его удалению, чтобы затем заменить его тем, что я узнал или взял отсюда. Но я могу отредактировать свой пост, чтобы подробно показать, что я сделал. – ghostwalker13