У меня есть небольшая программа на 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
.
Я был бы рад получить комментарии, если будет доступен более приемлемый метод.
Ура