Вопрос

У меня есть простое приложение 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top