我想知道为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’)