Basically "any" valid pyproject.toml would work. This is just a minimal working example, which uses flit as build backend.
2) Use a virtual environment
Если вы знакомы с виртуальными средами, активируйте одну из них и переходите к следующему шагу. Использование виртуальных сред не абсолютно обязательно, но они действительно помогут вам в долгосрочной перспективе (когда у вас выполняется более 1 проекта ..). Самые простые шаги (запускаются в корневой папке)
Создание виртуального env
python -m venv venv
Активировать виртуальный env
. venv/bin/activate (Linux) или ./venv/Scripts/activate (Win)
Деактивировать виртуальную среду env
deactivate (Linux)
Чтобы узнать больше об этом, просто найдите в Google "python virtualenv tutorial" или аналогичный. Вам, вероятно, никогда не понадобятся никакие другие команды, кроме создания, активации и деактивации.
После создания и активации виртуальной среды в вашей консоли должно быть указано имя виртуальной среды в круглых скобках
3) pip установит ваш проект в редактируемом состоянии
Установите свой пакет верхнего уровня (здесь ptdraft) с помощью pip. Хитрость заключается в использовании -e флага при выполнении установки. Таким образом, он устанавливается в состоянии, доступном для редактирования, и все изменения, внесенные в файлы .py, будут автоматически включены в установленный пакет. Обратите внимание, что для -e флага в pyproject.toml требуется pip 21.3 или новее.
В корневом каталоге запустите
pip install -e . (обратите внимание на точку, она обозначает "текущий каталог")
Вы также можете увидеть, что он установлен с помощью pip freeze
4) Импортируйте, добавляя mainfolder к каждому импорту
В этом примере mainfolder будет ptdraft. Преимущество этого в том, что вы не столкнетесь с конфликтами имен с именами других модулей (из стандартной библиотеки python или модулей сторонних производителей).
Пример использования
nib.py
deffunction_from_nib(): print('I am the return value from function_from_nib!')
life.py
from ptdraft.nib import function_from_nib
if __name__ == '__main__': function_from_nib()
Выполняется life.py
(venv) PS C:\tmp\test_imports> python .\ptdraft\simulations\life\life.py I am the return value from function_from_nib!
Ответ 3
Относительный импорт (как в from .. import mymodule) работает только в пакете. Чтобы импортировать 'mymodule', который находится в родительском каталоге вашего текущего модуля:
Примечание: __file__ Атрибут задается не всегда. Вместо использования os.path.abspath(__file__) я предлагаю использовать модуль inspect для получения имени файла (и пути) текущего файла.
Ответ 4
Похоже, проблема не связана с тем, что модуль находится в родительском каталоге или что-то в этом роде.
Вам нужно добавить каталог, который содержит ptdraft в PYTHONPATH
Вы сказали, что это import nib сработало с вами, это, вероятно, означает, что вы добавили ptdraft сам (не родительский) PYTHONPATH .