Как часть моей системы сборки, я использую модифицированную версию пакета Python (cogapp). Я не хочу устанавливать пакет, потому что:Пакет запуска Python без установки
- Я изменил пакет и не хочу беспокоиться о столкновении с неизмененными версиями, которые могут быть уже установлены.
- Лучше, если пользователям системы сборки не нужно устанавливать дополнительные пакеты.
Однако у меня возникли проблемы с использованием пакета, если он не установлен. Если является установлен, я могу запустить:
python -m cogapp <additional args>
и все работает как задумано.
Пакет имеет __main__.py
скрипт:
import sys
from cogapp import Cog
sys.exit(Cog().main(sys.argv))
Я попытался запустить это непосредственно, например:
python -m <path>/__main__ <additional_args>
Но я получаю ошибку:
...
/__main__.py", line 3, in <module>
from cogapp import Cog
ImportError: No module named cogapp
Это вероятно, связано с ошибкой, которую я получаю, если я запустил __init__.py
:
from .cogapp import *
Ошибка:
from .cogapp import *
ValueError: Attempted relative import in non-package
Как я могу запустить пакет как пакет?
EDIT:
Я нашел исправить, удалив весь относительный импорт из cogapp
и удаления -m, т.е. не работает в качестве модуля. В этом случае это не так уж плохо, потому что это небольшой пакет с единственным каталогом. Однако меня интересует, как это должно быть сделано в будущем. На эту тему написано много материала, но нет четких ответов!