Mor*_*ock 9 python installation
我在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
Run Code Online (Sandbox Code Playgroud)
现在,为了做到这一点,我必须在程序中假设数据文件将进入/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'
Run Code Online (Sandbox Code Playgroud)
再一次,我觉得这有点令人费解.你将如何进行安装?
非常感谢
编辑:解决方案已采用
根据这个问题的答案,以及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
Run Code Online (Sandbox Code Playgroud)
并在我的程序中添加了以下代码:
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)
Run Code Online (Sandbox Code Playgroud)
然后我使用,os.path.join(DATA_PATH, "file-to-reach.txt")以便程序可以访问它的数据/usr/share/my_program.
如果有更多可接受的方法,我很乐意发表评论.
干杯
S.L*_*ott 11
我错了setup.py方法(即:python setup.py安装),仅用于安装模块,以后在解释器或其他脚本中使用?
是.你错了.
您可以安装到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"程序都具有相同的三个功能. bash.csh,python,perl等等,等等,等等.
例如,检索包含在"数据"子文件夹中的数据文件,同时将它们称为"数据"子文件夹
./data/this_file.dat.
那将是一个糟糕的设计.
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, 'data', 'this_file.dat' )
| 归档时间: |
|
| 查看次数: |
6758 次 |
| 最近记录: |