Распространение приложения Python
-
19-09-2019 - |
Вопрос
У меня есть простое приложение Python, в котором моя структура каталогов выглядит следующим образом:
- проект/
- main.py
- config.py
- плагины/
- плагин1
- плагин2
- ...
Config.py загружает только файлы конфигурации и не содержит никакой информации о конфигурации.
Теперь я хочу распространять эту программу и решил использовать для этого инструменты настройки.Ожидается, что пользователи будут использовать файл main.py, так что один явно идет в /usr/bin, а остальные файлы - в /usr/share/project.
Но есть одна проблема:Мне каким-то образом нужно было указать main.py искать config.py в общем каталоге.Но я не могу быть уверен, где именно находится общий каталог, поскольку это зависит от setuptools, верно?
Как лучше всего распространять приложения на основе Python?
Решение
инструменты настройки установите свой пакет в место, доступное из Python, т.е.вы можете импортировать его:
import project
проблема возникает, когда вы выполняете относительный импорт вместо абсолютного импорта.если ваш main.py
импорт config.py
это работает, потому что они живут в одном каталоге.когда ты двигаешь свой main.py
в другое место, например /usr/bin
или другое место, присутствующее в ПУТЬ переменная среды, Python пытается импортировать config.py
от sys.path
а не из каталога вашего пакета.решение состоит в том, чтобы использовать абсолютный импорт:
from project import config
сейчас main.py
является «подвижным».
другое решение, которое я предпочитаю, — использовать автоматическое создание сценариев, предлагаемое инструменты настройки.
вместо того, чтобы хранить ваш код в
if __name__ == "__main__":
# here all your beautiful code
оператор, поместите свой код в функцию (main может быть хорошим именем):
def main():
# put your code here
if __name__ == "__main__": # not needed, just in case...
main()
теперь измените свой setup.py
:
setup(
# ...
entry_points = {
"console_scripts": [
# modify script_name with the name you want use from shell
# $ script_name [params]
"script_name = project.main:main",
],
}
)
вот и все.после установки инструменты настройки создаст сценарий-оболочку, который можно вызывать из оболочки и который вызывает вашу основную функцию.сейчас main.py
может находиться в каталоге вашего проекта, и вам больше не нужно перемещать его в bin/
каталог.Обратите внимание, что инструменты настройки автоматически помещает этот скрипт в bin/
каталог относительно префикса установки.
эс.
python setup.py install --prefix ~/.local
установите пакет вашего проекта в
~/.local/lib/python<version>/site-packages/<package_name>
и ваш сценарий в
~/.local/bin/<script_name>
так что будь уверен, что ~/.local/bin
присутствует в вашем ПУТЬ окр.
дополнительная информация по адресу: http://peak.telecommunity.com/DevCenter/setuptools#automatic-script-creation