Прямо сейчас у меня есть проект, который имеет следующий макет:
foo/
__init__.py
__main__.py
foo.py
В этом случае foo.py
на самом деле является основным файлом API, поэтому разработчики должны делать «из foo import foo», но я также хотел сделать так, чтобы конечные пользователи могли просто запустить ~$ foo
и получить интерфейс.
, который, когда я делаю установку distutils, создает /usr/bin/__main__.py
, потому что (a) я не знаю, как использовать distutils, [менее важно] и (b) я не уверен в том, что обычно считается Правильно.
Насколько я могу судить, у меня есть три варианта:
Сделайте distutils умнее, чтобы setup.py install
создал
символическая ссылка /usr/bin/foo -> $PYTHONLIB/foo/__main__.py
. Это мое
немедленная интуиция, и я, вероятно, мог бы понять, как это сделать,
хотя вещи, о которых я думаю, чувствуют себя как хаки
и я не нашел никого, кто бы говорил об этом.
Переименуйте __main__.py
до foo
перед распространением и измените вызов на
настройка distutils на setup(scripts=['foo'], ...)
. Это очень похоже на (1), за исключением случаев, когда это происходит, я думаю.
Только не включайте интерфейс с библиотечным пакетом. я чувствую
как это зависит в основном от размера библиотеки / интерфейса, как
имеет ли это смысл.
Я не видел очень много пакетов, которые включают __main__.py
, если таковые имеются, поэтому я не уверен, что люди просто не используют их, или я не использовал правильные пакеты. Тот факт, что я не смог найти ни одного сообщения в блоге или статей, касающихся __main__.py
и distutils, подсказывает мне, что это не очень популярная комбинация.