Прямо сейчас у меня есть проект, который имеет следующую структуру:Общее соглашение для библиотек python, которые также имеют интерфейсный модуль?
foo/
__init__.py
__main__.py
foo.py
В этом случае foo.py
на самом деле главный файл апи, поэтому разработчики призваны сделать «от Foo импорта Foo», но я также хотел сделать так, чтобы конечные пользователи могли просто запустить ~$ foo
и получить интерфейс.
, который, когда я выполняю установку distutils, создает /usr/bin/__main__.py
, потому что (а) я не знаю, как использовать distutils, [менее важно] и (б) я не уверен в том, что обычно считается правильным Вещь.
Насколько я могу сказать, у меня есть три варианта:
Make Distutils умнее, так что
setup.py install
создает симлинка/usr/bin/foo -> $PYTHONLIB/foo/__main__.py
. Это моя непосредственная интуиция , и я, вероятно, мог бы выяснить, как это сделать, , хотя все, что я думаю о том, чтобы делать все, похоже на хаки , и я не нашел никого, кто об этом говорил.Переименовать
__main__.py
толькоfoo
перед распределением, а также изменить вызов настройки Distutils' бытьsetup(scripts=['foo'], ...)
. Это очень похоже на (1), за исключением случаев, когда это происходит, я думаю.Просто не включайте интерфейс с библиотечным пакетом. Я чувствую, что , как это зависит в основном от размера библиотеки/интерфейса, как , имеет ли смысл.
я не видел очень много пакетов, которые включают в себя __main__.py
, если таковые имеются, так что я не уверен, что люди просто не использовать их, или я не использую правильные пакеты. Тот факт, что я не мог найти никаких сообщений в блогах или статей, касающихся __main__.py
и distutils, говорит мне, что это не особенно популярная комбинация.
Мое понимание этого в том, что если мой foo/__ init__.py имеет 'if __name__ ==" __main __ ": \ n печатать 'success.'', и я делаю' python -m foo', я должен видеть "успех «. Вместо этого я получаю: «foo - это пакет и не может выполняться напрямую». То же самое происходит, если я использую команду в скрипте. – quodlibetor
Ну, это глупо. Вместо этого попробуйте 'foo .__ init__'. –
Кроме того, я думал, что полагаюсь на специальные характеристики '__main __. Py'? Если нет других, я думал, что все, что он сделал, это сделать исполняемый файл как скрипт. – quodlibetor