适用于Linux下的小型Python程序(非模块)的正确安装脚本

前端之家收集整理的这篇文章主要介绍了适用于Linux下的小型Python程序(非模块)的正确安装脚本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 python中有一个小程序,它包含一个.py文件和一个程序使用的数据文件目录.

我想知道为Linux上具有管理员权限的用户创建安装过程的正确方法,以便他可以在他的系统上安装该程序,并从命令行使用它,包括选项和参数.编辑:我遇到问题的部分是让程序安装后检索包含在“数据”子文件夹中的数据文件.

安装/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(How to know the path of the running script in 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,“file-to-reach.txt”),以便程序可以在/usr/share / my_program下找到它的数据.

如果有更多可接受的方法,我很乐意发表评论.

干杯

解决方法

Am I wrong that the setup.py method (ie: python setup.py install),is only for installing modules,later to be used from within the interpreter or other scripts?

是.你错了.

您可以安装到Python的脚本目录中.继续阅读setup.py可以做的所有事情. http://docs.python.org/distutils/setupscript.html#installing-scripts

这实际上非常非常简单.它与Python无关.

Python脚本可以在任何地方运行. Linux为您提供了各种各样的方法来使可执行文件(/path/to/my_program.py)可运行.

所有这些广泛而广泛的方式有三个共同点.有三件事是Linux的核心,与Python完全无关.

>该文件必须位于用户的PATH上.
>该文件必须具有“执行”权限(chmod x …).
>该文件必须以#!/usr/bin/env python开头.

怎么做到这一点?

对于#1.

>您可以检查PATH并将文件放在PATH上的任何目录中.有很多标准选择. /usr/local / bin,例如.
>您可以修改用户的PATH以包含一些新目录. / path / to,例如,以便可以找到/path/to/my_program.py.

对于#2.您执行适当的chmod x.

对于#3.您编写了适当的代码行.

有关更多信息,请阅读“Linux Shell”.所有“shell”程序都具有相同的三个功能.庆典. csh,python,perl等等等

retrieve the data files,contained in a ‘data’ sub-folder,while refering to them as ./data/this_file.dat,for example.

那将是一个糟糕的设计.

Linux(Python之外)提供了很多方法来查找有用的数据文件.

>使用已知路径将它们安装在已知位置.想到/usr/local / share.这可能不是最好的位置,但它相当受欢迎.>使用环境变量.例如,MYAPP_HOME可以设置为文件的位置.你可以使用os.path.join(os.environ [‘MYAPP_HOME’],’data’,’this_file.dat’)非常受欢迎.>使用__file__变量找出脚本的位置.然后使用os.path定位目录并使用os.path.join汇编数据路径(this_directory,’this_file.dat’)

猜你在找的Linux相关文章