Правильный сценарий установки для небольшой программы Python (не модуля) под Linux

У меня есть небольшая программа на Python, состоящая из одного файла .py и каталога файлов данных, используемых программой.

Я хотел бы знать, как правильно создать процедуру установки для пользователя с правами администратора в Linux, чтобы он мог установить программу в своей системе и использовать ее из командной строки с параметрами и параметрами. РЕДАКТИРОВАТЬ: У меня проблемы с тем, чтобы программа после установки извлекала файлы данных, содержащиеся в подпапке data.

Будет ли сценарий установки, устанавливающий исполняемый файл программы в / usr / local / bin и папку данных в / usr / share / my_program / data , приемлемым решением? Что-то вроде:

#!/bin/bash
# Launch with sudo
chmod +x program.py
cp program.py /usr/local/bin
cp -r data /usr/share/my_program
echo Installation complete

Теперь, чтобы сделать это, я должен предположить в программе, что файлы данных будут находиться в / usr / share / my_program / data . Но я бы также оставил пользователю возможность использовать программу без ее установки. Тогда я должен был бы предположить, что данные находятся в './data' относительно исполняемого файла программы. Как мне решить эту проблему? Я могу придумать несколько способов, но мне кажется, что я создаю беспорядок, в котором должен быть ясный и правильный ответ.

В настоящее время я рассматриваю возможность использования предложения try except:

try:
    find data from /usr/share/my_program && set path accordingly
except:
    set path to the data as './data'

Опять же, я считаю, что это немного запутано.Как бы вы продолжили установку?

Большое спасибо


РЕДАКТИРОВАТЬ: РЕШЕНИЕ ПРИНЯТО

На основании ответов на этот вопрос и на вопросы, предложенные FakeRainBrigand ( Как узнать путь к запущенный сценарий на Python? ), я создал сценарий установки, который выглядит следующим образом:

#!/bin/bash
mkdir /usr/share/my_program
chmod +x my_program.py
cp my_program.py /usr/local/bin
cp -r data /usr/share/my_program
echo Installation completed

И добавил в свою программу следующий код:

if os.path.dirname(__file__) == "/usr/local/bin":
    DATA_PATH = "/usr/share/my_program/data"
elif os.path.dirname(__file__) == ".":
    DATA_PATH = "./data"
else:
    print "You do not have a working installation of my_program"
    print "See the installation procedure in the README file"
    sys.exit(1)

Затем я использую os.path.join (DATA_PATH, "файл-к-достижению.txt") , чтобы программа могла получить доступ к его данным, находящимся в / usr / share / my_program .

Я был бы рад получить комментарии, если будет доступен более приемлемый метод.

Ура

9
задан Community 23 May 2017 в 12:00
поделиться