Я часто сталкиваюсь с некоторыми пакетами Python (которые я установил с помощью pip), к которым можно получить доступ как к отдельному двоичному файлу в Terminal. Не просто модуль Python.
Я хочу знать стандартный способ создания пакета, который может быть установлен $pip install mypackage
(или $python setup.py install
), а также доступен как $mypackage
из любого места. Я знаю, что могу получить доступ к файлу __main__.py с помощью $python -m mypackage
. Но я хочу, чтобы мой пакет функционировал так же, как любой двоичный файл, хранящийся в /usr/bin.
Я не ищу какой-либо взлом переменной псевдонима/пути и не хочу создавать файлы .deb/.rpm.
РЕДАКТИРОВАТЬ: я получил помощь от commentbox . В конце концов, в setuptools уже есть такая возможность. Документация по Setuptools
Параметр entry_point функции setup() делает свое дело.
setup(
# other arguments here...
entry_points={
'console_scripts': [
'foo = my_package.some_module:main_func',
'bar = other_module:some_func',
],
'gui_scripts': [
'baz = my_package_gui:start_func',
]
}
Здесь entry_point
принимает словарь, значение которого содержит список. Создаются два сценария CLI с именами foo
и bar
, которые содержат функции main_func
и some_func
соответственно из my_package.some_module
и other_module
. Скрипты графического интерфейса также могут быть созданы с помощью этого метода.
/usr/local/lib/
, что не должно мешать правильно установленным пакетам, но если системный пакет внезапно находит более новую, несовместимую версию зависимости, он может сломаться. Использование venv предпочтительнее. - person mata   schedule 19.12.2017